我如何解决以下sql语法错误
Posted
技术标签:
【中文标题】我如何解决以下sql语法错误【英文标题】:How do i solve the following sql syntax error 【发布时间】:2020-12-19 19:14:39 【问题描述】:您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 1 行的 ':Username, :passw, :addrss, :DOB, :emil, :ag)' 附近使用正确的语法
代码:
def submit():
my_cursor = mydb.cursor()
#INSERT INTO TABLE
my_cursor.execute("INSERT INTO madhav VALUES (:Username, :passw, :addrss, :DOB, :emil, :ag)",
'Username': Username.get(),
'passw' : passw.get(),
'addrss' : addrss.get(),
'DOB' : DOB.get(),
'emil' : emil.get(),
'ag' : ag.get()
)
mydb.commit()
mydb.close()
# Clear The Text Boxes
Username.delete(0,END)
passw.delete(0,END)
addrss.delete(0,END)
DOB.delete(0,END)
emil.delete(0,END)
ag.delete(0,END)
上述函数用于使用 GUI 将值插入数据库
【问题讨论】:
显示“CREATE TABLE”SQL 并解释从Username.get()
等返回的数据类型是什么。
...顺便说一句,您为什么要留下信件? passw
的输入并不比password
容易,而且后者更更清晰。 emil
与 email
同上。事实上,完整的单词可能更容易输入,因为它们是你可能有肌肉记忆的真实单词。清晰度很重要。在源代码的此处或此处保存一个字节没有任何好处。
my_cursor.execute("CREATE TABLE madhav (name VARCHAR(255), password VARCHAR(255), address VARCHAR(255), DT DATE, email VARCHAR(255), age INTEGER(10), user_id INTEGER AUTO_INCREMENT Primary key)") 这是创建表sql
【参考方案1】:
这不是您在 mydb 中使用命名参数的方式。这种参数的正确语法是%(name)s
。所以,在你的情况下:
my_cursor.execute("INSERT INTO madhav VALUES (%(Username)s, %(passw)s, %(addrss)s, %(DOB)s, %(emil)s, %(ag)s)",
'Username': Username.get(),
'passw' : passw.get(),
'addrss' : addrss.get(),
'DOB' : DOB.get(),
'emil' : emil.get(),
'ag' : ag.get()
)
【讨论】:
感谢您的代码,但弹出另一个错误说 mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法......如果错误/怀疑是愚蠢的,我对此很抱歉 @tyzion 我错过了values
子句末尾的结尾)
,我深表歉意。已编辑和修复。
@Mureinik 为什么%
和s
..如果您可以在答案中添加它,它将帮助很多像我这样的路人.. 谢谢。
@AbhishekRai 正如我所指出的,这是 mydb 用于命名参数的语法。不太清楚如何进一步澄清这一点......
@Mureinik 好吧,您的这条评论将帮助路人。 :)【参考方案2】:
这些值采用变量类型,如字符串、整数等。 所以你的代码会变成
stmt= ( “INSERT INTO madhav(用户名、密码、地址、出生日期、emil、ag)” “值(%s、%s、%s、%s、%s、%s)” )
因为所有字段都是字符串类型,所以有 %s 否则对于整数它将是 %i 接下来,您可以将此 stmt 与要执行的数据绑定。
data = (Username.get(), passw.get(), addrss.get(), DOB.get(),emil.get(),ag.get()) my_cursor.execute(stmt, data)
查看这些文档了解更多信息 https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html
【讨论】:
以上是关于我如何解决以下sql语法错误的主要内容,如果未能解决你的问题,请参考以下文章
我该如何解决这个错误,SQLSTATE [42000]? [复制]