我如何解决以下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 容易,而且后者更清晰。 emilemail 同上。事实上,完整的单词可能更容易输入,因为它们是你可能有肌肉记忆的真实单词。清晰度很重要。在源代码的此处或此处保存一个字节没有任何好处。 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语法错误的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 vb.net 中的这个 SQL 语法错误?

我该如何解决这个错误,SQLSTATE [42000]? [复制]

如何调试“您的 SQL 语法有错误”

"SQL SERVER,错误:207" 如何解决

如何解决 MySql 中的 PARTITION BY 语法错误

如何解决我的 SQL Server CE 错误?