如何在Mysql中从Tkinter字符串变量中插入数据。

问题描述 投票:0回答:2

我创建了2个python脚本

在第一个脚本中,我使用tkinter来获取用户的条目,然后我创建了一个按钮来提交条目,这个按钮调用了一个函数,这个函数调用了第二个脚本作为一个模块。

我为查询创建了第二个脚本,我使用了Mysql-Python-Connector,在这个脚本中,我创建了一个带参数的函数,参数是第一个脚本中的文本变量。

问题:每次我运行这个脚本时,都会弹出这个错误。

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib64/python3.8/tkinter/__init__.py", line 1883, in __call__
    return self.func(*args)
  File "mainsoft.py", line 14, in insname
    querymod.dbins(nameget)
  File "/home/akeno/Documents/giveaway/redesign/main/stack/querymod.py", line 13, in dbins
    concursor.execute(querydb,aux)
  File "/home/akeno/.local/lib/python3.8/site-packages/mysql/connector/cursor.py", line 569, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "/home/akeno/.local/lib/python3.8/site-packages/mysql/connector/connection.py", line 598, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "/home/akeno/.local/lib/python3.8/site-packages/mysql/connector/connection.py", line 486, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%s)' at line 1

这里是第一个脚本。

mainsoft.py

from tkinter import *
from tkinter import ttk
import tkinter


root = tkinter.Toplevel()

def insname():

    nameget = varname.get()

    import querymod

    querymod.dbins(nameget)    

namelb = Label(root, text = "Name")
namelb.pack()

varname = StringVar()

nameEntry = Entry(root, textvariable = varname)
nameEntry.pack()

submitButton = Button(root, command = insname)
submitButton.pack()

root.mainloop()

这是第二个脚本,查询脚本。

querymod.py

import mysql.connector

def dbins(param1):
    con = mysql.connector.connect(user = 'user1', password = 'yourpassword', host = '127.0.0.1', database = 'Student')

    concursor = con.cursor()

    aux = (param1)

    querydb = """insert into Student(Name) values(%s)"""

    concursor.execute(querydb,aux)

    con.commit()
    con.close()

有什么办法可以解决这个问题吗? 谢谢阅读。

python mysql python-3.x tkinter python-module
2个回答
1
投票

试着用.com代替.com。

aux = (param1)

querydb = """insert into Student(Name) values(%s)"""

concursor.execute(querydb,aux)

这 ..:

aux = (param1)

querydb = "insert into Student(Name) values('{}')".format(aux)

concursor.execute(querydb)
© www.soinside.com 2019 - 2024. All rights reserved.