【问题标题】:Python variables in MySQL execute commandMySQL中的Python变量执行命令
【发布时间】:2019-04-17 11:42:14
【问题描述】:

我到处寻找答案,但没有找到合适的答案。

这是我的代码:

conn = pymysql.Connect(host="host", user="user", passwd="password", db="database")

dbhandler = conn.cursor()
table_name = today_date.split(" ")[0]
execute_it = """CREATE TABLE %s (
        USERNAME CHAR(20) NOT NULL, 
        X CHAR(10), 
        Y INT, 
        Z INT, 
        A INT)"""

try:
    dbhandler.execute(execute_it, table_name)
except:
    print("\n----------------------------\nFailed to create table.")

现在我尝试这样做。 我尝试在执行中使用 % 分离。 我试过了?而不是 %s。 我尝试了更多选项,但没有一个对我有用,我无法创建表格

这是我得到的例外:

(1064, "您的 SQL 语法有错误;请查看手册 对应于您的 MariaDB 服务器版本,以便使用正确的语法 ''11/14/18' 附近(\n USERNAME CHAR(20) NOT NULL,\n
X CHAR(10' at line 1")

使用 5.5.52-MariaDB。

谢谢!

编辑:

设法通过它。 感谢 Pavel Francírek 的帮助。

【问题讨论】:

    标签: python mysql mysql-python mysql-error-1064


    【解决方案1】:

    问题不在于占位符,而在于日期格式。表名中不允许使用字符“/”。尝试类似:

    table_name = today_date.split(" ")[0].replace("/","")
    

    我假设您的日期格式中的所有数字都是两位数。

    【讨论】:

    • 顺便说一句,我也试过用 """INSERT INTO table_name (USERNAME, X,Y, Z, A) VALUES (%s, %s, %d, %d, %d) """, (value1, value2, value3, value4, value5)
    • 好吧,也许表名必须以字母开头:table_name = "t"+today_date.split(" ")[0].replace("/","")
    • 通常只有一个占位符 (%s),不像字符串格式(没有 %d 等)
    • 查看第二条评论,但无论如何我也尝试了你所说的,但没有奏效。我实际上在这里失去了理智,我尝试了几乎所有选项,但没有任何效果......
    • 你可以尝试使用Python的"".format()。但前提是您绝对确定您的数据源(谨防 SQL 注入)
    猜你喜欢
    • 2017-10-03
    • 2023-03-08
    • 2021-03-22
    • 2014-08-27
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 2019-08-28
    • 2013-06-10
    相关资源
    最近更新 更多