【问题标题】:Pyodbc SQL INSERT query not working but no errorPyodbc SQL INSERT 查询不起作用但没有错误
【发布时间】:2022-08-06 17:59:40
【问题描述】:

在我的 Python 程序的这一部分中,我从 Text 小部件中获取用户输入并将它们插入到预先存在的 SQL Server 表中。输入在写入表之前经过验证,但是如果我尝试删除新插入的行,它就不存在了。我打开了 SQL Server Management Studio,数据似乎并没有实际插入到表中,尽管执行查询时没有错误。

我正在使用 Pyodbc,并且已经四处寻找答案,最常见的建议是使用 conn.commit() 但是我已经有了这个,但它并没有解决问题。

我与此问题相关的代码如下:

        def gsap_commit():

            teams = [\"Arsenal\", \"Aston Villa\", \"Brentford\", \"Brighton\", \"Burnley\", \"Chelsea\", \"Crystal Palace\", \"Everton\", \"Leeds\", \"Leicester\", \"Liverpool\",
                      \"Man City\", \"Man United\", \"Newcastle\", \"Norwich\", \"Southampton\", \"Tottenham\", \"Watford\", \"West Ham\", \"Wolves\"]

            gs_fname = gs_ent1.get(\"1.0\", \"end-1c\")
            gs_sname = gs_ent2.get(\"1.0\", \"end-1c\")
            gs_apdob = gs_ent3.get(\"1.0\", \"end-1c\")
            gs_pos = gs_ent4.get(\"1.0\", \"end-1c\")
            gs_team = gs_ent5.get(\"1.0\", \"end-1c\")
            gs_price = gs_ent6.get(\"1.0\", \"end-1c\")
            
            if gs_fname.isalpha() == True and gs_sname.isalpha() == True:
                if int(gs_apdob[5:7]) <= 12 and int(gs_apdob[8:10]) <= 31:
                    if gs_pos == \"GK\" or gs_pos == \"DEF\" or gs_pos == \"MID\" or gs_pos == \"FWD\":
                        if gs_team in teams:
                            if int(gs_price) > 4.5 and int(gs_price) < 18:
                                addplayerquery = \"INSERT INTO PlayerList(FirstName, Surname, DOB, Position, Team, Price, InitialPrice, TotalPts, InjuryStatus, DoubtStatus) VALUES (?,?,?,?,?,?,?,0,0,0)\"
                                cursor.execute(addplayerquery, gs_fname, gs_sname, gs_apdob, gs_pos, gs_team, gs_price, gs_price)
                                conn.commit()
                                tkMessageBox.showinfo(\"Add Player Successful\", \"Successfully added player - {0} {1}\".format(gs_fname, gs_sname))

                            else:
                                tkMessageBox.showinfo(\"Add Player Unsuccessful\", \"The price entered was too anomalous.\\nPlease re-enter a suitable price\")

                        else:
                            tkMessageBox.showwarning(\"Add Player Unsuccessful\", \"Please enter a valid team name\")

                    else:
                        tkMessageBox.showwarning(\"Add Player Unsuccessful\", \"Please enter a valid position\")

                else:
                    tkMessageBox.showwarning(\"Add Player Unsuccessful\", \"Please enter a valid birth date\")

            else:
                tkMessageBox.showwarning(\"Add Player Unsuccessful\", \"Please enter a valid name\")


        def gs_add_player():

            gs_ent1.configure(state=\"normal\")
            gs_ent2.configure(state=\"normal\")
            gs_ent3.configure(state=\"normal\")
            gs_ent4.configure(state=\"normal\")
            gs_ent5.configure(state=\"normal\")
            gs_ent6.configure(state=\"normal\")
            gs_ent1.delete(\"1.0\",END)
            gs_ent1.insert(\"1.0\", \"First Name\")
            gs_ent1.configure(width=20, bd=1)
            gs_ent1.focus()
            gs_ent2.delete(\"1.0\",END)
            gs_ent2.insert(\"1.0\", \"Surname\")
            gs_ent2.configure(width=20, bd=1)
            gs_ent3.delete(\"1.0\",END)
            gs_ent3.insert(\"1.0\", \"DOB (\'YYYY-MM-DD\')\")
            gs_ent3.configure(width=20, bd=1)
            gs_ent4.delete(\"1.0\",END)
            gs_ent4.insert(\"1.0\", \"Position\")
            gs_ent4.configure(width=8, bd=1)
            gs_ent5.delete(\"1.0\",END)
            gs_ent5.insert(\"1.0\", \"Team\")
            gs_ent5.configure(width=20, bd=1)
            gs_ent6.delete(\"1.0\",END)
            gs_ent6.insert(\"1.0\", \"Price\")
            gs_ent6.configure(width=5, bd=1)
            gs_confirm_bt.configure(text=\"Add\", command=gsap_commit)


        gs_addplr_bt = tk.Button(self, text=\"Add Player\", bg=\"#0ebf08\", fg=\"white\", font=(\"Segoe UI\", 12), command=gs_add_player)
        gs_ent1 = tk.Text(self, height=1, width=20, bd=2)
        gs_ent2 = tk.Text(self, height=1, width=20, bd=2)
        gs_ent3 = tk.Text(self, height=1, width=20, bd=2)
        gs_ent4 = tk.Text(self, height=1, width=8, bd=2)
        gs_ent5 = tk.Text(self, height=1, width=20, bd=2)
        gs_ent6 = tk.Text(self, height=1, width=5, bd=2)
        gs_ent1.configure(state=\"disabled\")
        gs_ent2.configure(state=\"disabled\")
        gs_ent3.configure(state=\"disabled\")
        gs_ent4.configure(state=\"disabled\")
        gs_ent5.configure(state=\"disabled\")
        gs_ent6.configure(state=\"disabled\")
        gs_confirm_bt = tk.Button(self, text=\"Add\", fg=\"white\", bg=\"#38003c\", width=10)
        
        gs_addplr_bt.grid(row=6, column=2, columnspan=2, sticky=\"NSEW\", pady=(10,10))
        gs_ent1.grid(row=11, column=0)
        gs_ent2.grid(row=11, column=1)
        gs_ent3.grid(row=11, column=2)
        gs_ent4.grid(row=11, column=3)
        gs_ent5.grid(row=11, column=4)
        gs_ent6.grid(row=11, column=5)
        gs_confirm_bt.grid(row=12, column=2, columnspan=2, pady=(20,0))
                

这也是建立与 SQL Server 的连接的代码,在程序开始时声明(与上面的代码不同的类等)以防它有用:

conn = pyodbc.connect(\"Driver={SQL Server};\"
                      \"Server=DESKTOP-MLKS8CG\\SQLEXPRESS;\"
                      \"Database=FFProject;\"
                      \"Trusted_Connection=yes;\")

cursor = conn.cursor()

谁能帮我理解为什么我的 INSERT 语句似乎没有保存?谢谢!

  • 您是否尝试过将参数值作为列表、序列或元组传递?例如:cursor.execute(addplayerquery, (gs_fname, gs_sname, gs_apdob, gs_pos, gs_team, gs_price, gs_price) )

标签: python sql sql-server sql-insert commit


【解决方案1】:

我也遇到了同样的问题,对我来说重新启动 SQL Server 工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多