尝试使用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 时,您应该确保venuepaxint。如果将其视为字符串,它将被引用,然后数据库将不喜欢它。也像 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 数据库

从 sql 文件或使用 csv 文件将数据插入 mysql

使用 Python 将 Csv 文件写入 SQL Server 数据库中已有的表

如何使用 dateTimePicker 将日期插入 SQL 数据库日期列?

将数据插入oracle sql live [重复]