尝试将变量作为表名和值插入时出现mysql语法错误
虽然我能够使用上述方法毫无问题地创建表,但对于代码的第二部分,我得到了语法错误,我不知道原因。尝试使用格式化功能,但不起作用。 这是我得到的错误:尝试将变量作为表名和值插入时出现mysql语法错误,mysql,python-3.x,syntax,sql-insert,Mysql,Python 3.x,Syntax,Sql Insert,虽然我能够使用上述方法毫无问题地创建表,但对于代码的第二部分,我得到了语法错误,我不知道原因。尝试使用格式化功能,但不起作用。 这是我得到的错误: 1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用接近“,(1,인비저블맨, 比率:6.7,예매율25.2%)),第1行的插入表格为: if conn.is_connected(): cursor = conn.cursor()
1064(42000):您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用接近“,(1,인비저블맨, 比率:6.7,예매율25.2%)),第1行的插入表格为:
if conn.is_connected():
cursor = conn.cursor()
sql = '''CREATE TABLE IF NOT EXISTS `%s`(
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
rating VARCHAR(255) NOT NULL,
reservation_rate VARCHAR(255) NOT NULL
)''' % day
cursor.execute(sql)
x = 1
for i in range(len(title_rank)):
title = rank[0][i]
rating = rank[1][i]
reservation = rank[2][i]
cursor.execute("""INSERT INTO `%s`(id, title, rating, reservation_rate), (%d, %s, %s, %s))
"""%(day, x, title, rating, reservation))
x += 1
conn.commit()
,
的语法不正确
您还需要绝对确定正在使用带有占位符值的execute
:
INSERT INTO `%s`(id, title, rating, reservation_rate) VALUES (%d, %s, %s, %s)
切勿使用字符串插值来代替
%
。这就为您打开了大门。为什么您要为每件事创建表,而不是使用一个表和一列的关系表结构?谢谢您的帮助,但我的问题是,我是否可以使用变量作为表名并插入变量作为值,尽一切可能避免这种情况,比如没有动态表名。如果必须使用动态表名,则单独组合查询的这一部分,如(“插入%s(…)”%(day))+“(%d,%…)”,(…)
,在绝大多数情况下,这样的多个表不值得一天一天地分解出来。这使得做简单的查询非常恼火。如果您有这么多记录,您需要以某种方式分割数据,那么您需要表分区或水平分片,而不是多个具有动态名称的表。
cursor.execute("""INSERT INTO tablename (id, title, rating, reservation_rate), (%d, %s, %s, %s))
""", (day, x, title, rating, reservation))