尝试使用python将数据插入sql数据库
Posted
技术标签:
【中文标题】尝试使用python将数据插入sql数据库【英文标题】:Trying to insert data into sql database using python 【发布时间】:2021-05-19 14:10:15 【问题描述】:我正在尝试使用 python 和 xampp 将我的详细信息插入到 sql 数据库中,但每当我尝试这样做时,它总是提示我错误“由于:(1064,您的 SQL 语法有错误...
这是我的create.py
代码
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
import PIL
from PIL import ImageTk
from PIL import Image
import register
import menu
import pymysql
class Create:
def __init__(self,root):
self.root = root
self.root.title("Create New Timetable")
self.root.geometry("1350x768+0+0")
self.root.resizable(False, False)
self.bg = ImageTk.PhotoImage(file="Images/bgimage.jpg")
bg = Label(self.root, image=self.bg).place(x=0, y=0, relwidth=1, relheight=1)
framecreate = Frame(self.root, bg="white")
framecreate.place(x=450, y=100, height=500, width=700)
venuecreate = Label(framecreate, text="Please add the venue", font=("Arial", 12, "bold"), fg="orange").place(x=50,y=100)
self.venue=Entry(framecreate,font=("arial",15,),bg="lightgray")
self.venue.place(x=50, y=130, width=250)
capacitycreate = Label(framecreate, text="Please add the capacity of the venue", font=("Arial", 12, "bold"), fg="orange").place(x=370,y=100)
self.venuepax=Entry(framecreate,font=("arial",15,),bg="lightgray")
self.venuepax.place(x=370, y=130, width=250)
timecreate = Label(framecreate, text="Please add the time", font=("Arial", 12, "bold"), fg="orange").place(x=50,y=170)
self.time=Entry(framecreate,font=("arial",15,),bg="lightgray")
self.time.place(x=50, y=200, width=250)
lecturercreate = Label(framecreate, text="Please add the lecturer", font=("Arial", 12, "bold"), fg="orange").place(x=370,y=170)
self.lecturer=Entry(framecreate,font=("arial",15,),bg="lightgray")
self.lecturer.place(x=370, y=200, width=250)
modulercreate = Label(framecreate, text="Please add the module", font=("Arial", 12, "bold"), fg="orange").place(x=50,y=240)
self.subject=Entry(framecreate,font=("arial",15,),bg="lightgray")
self.subject.place(x=50, y=270, width=250)
departmentcreate = Label(framecreate, text="Please add the department", font=("Arial", 12, "bold"), fg="orange").place(x=370,y=240)
self.department=Entry(framecreate,font=("arial",15,),bg="lightgray")
self.department.place(x=370, y=270, width=250)
addbutton = Button(framecreate, text="Add", command=self.adddetails, bg="white", fg="orange",
font=("trebuchet ms", 12)).place(x=50, y=350)
nextbutton = Button(framecreate, text="Next", command="", bg="white", fg="orange",
font=("trebuchet ms", 12)).place(x=50, y=400)
def adddetails(self):
if self.venue.get() == "":
messagebox.showerror("Error","Field cannot be left empty!!",parent=self.root)
else:
try:
con=pymysql.connect(host="localhost",user="root",password="",database="timetable")
cur=con.cursor()
cur.execute("insert into timetable list (venue,venuepax,time,lecturer,module,department) values(%s,%s,%s,%s,%s,%s)",
(self.venue.get(),self.venuepax.get(),self.time.get(),self.lecturer.get(),self.subject.get(),self.department.get()))
con.commit()
con.close()
messagebox.showinfo("Success","Registration Successful",parent=self.root)
except Exception as ex:
messagebox.showerror("Error",f"Error due to: str(ex)",parent=self.root)
def CreateForm():
win = Tk()
obj = Create(win)
if __name__ == "__main__":
root = Tk()
obj = Create(root)
root.mainloop()
当我尝试在我的数据库中添加详细信息时,错误指出“错误原因:(1064,您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册以获取正确的语法
我的表的值是这样的
1 id Primary int(10)
2 venue varchar(50)
3 venuepax int(10)
4 time varchar(50)
5 lecturer varchar(50)
6 module varchar(50)
7 department varchar(50)
【问题讨论】:
如果我冒险猜测,我会说您的数据类型与列不匹配。表的架构是什么?我最怀疑time
字段
@Macattack 我更新了我的餐桌详情
在发送到execute
时,您应该确保venuepax
是int
。如果将其视为字符串,它将被引用,然后数据库将不喜欢它。也像 Chuma 说的那样删除 list
【参考方案1】:
我会改变
cur.execute("insert into timetable list (venue,venuepax,time,lecturer,module,department) values(%s,%s,%s,%s,%s,%s)",
(self.venue.get(),self.venuepax.get(),self.time.get(),self.lecturer.get(),self.subject.get(),self.department.get()))
到
cur.execute("""insert into timetable (venue,venuepax,time,lecturer,module,department) values(%s,%s,%s,%s,%s,%s)""",
(self.venue.get(),self.venuepax.get(),self.time.get(),self.lecturer.get(),self.subject.get(),self.department.get()))
表格时间表后的“列表”应删除。 您还应该遵循 python 字符串语法 - 3 个双引号/括号而不是 1 个环绕语句。
【讨论】:
如果由于我们对源数据一无所知而导致答案不起作用,请在查询中使用它们之前将值设置为局部变量,以便了解它们是什么。另外我不知道 INT(10) 的数据类型是什么。我遇到的最接近的情况是在将精度数定义为 MSSQL 中的小数或 ORACLE 中的 NUMERIC 时。以上是关于尝试使用python将数据插入sql数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中从 Azure Databricks 插入 Azure SQL 数据库
将字典插入使用 Python 中的 JSON 创建的 SQL 数据库
使用 Python 将 Csv 文件写入 SQL Server 数据库中已有的表