【发布时间】: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