为了账号安全,请及时绑定邮箱和手机立即绑定

编程错误 1064 在 Python 中使用 MySQL 从现有表中选择表

编程错误 1064 在 Python 中使用 MySQL 从现有表中选择表

哔哔one 2022-09-27 09:50:14
我在云中有一个现有的表,我想制作它的副本。我通过pymysql连接到我的数据库,从新用户提供的输入中提取用户名,并且我想创建一个由用户名调用的新表,该表将是原始表的副本。当我运行下面的代码时,我有以下错误:pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''username' AS SELECT * FROM original_table' at line 1")uname = blabla@bla.comconn = pymysql.connect(                    host="db.host",                    port=int(3306),                    user=user,                    passwd=password,                    db=db,                    charset='utf8mb4'                )                cur = conn.cursor()                table_name = uname.replace('@', '_').replace('.', '_')                print('TABLE NAME:', table_name)                cur.execute(""" CREATE TABLE %s AS SELECT * FROM original_table """, (table_name))
查看完整描述

1 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

参数引用用于引用。引用表名不起作用,因为在MySQL中,引用表名的方法是使用反引号('),而不是引号。

MariaDB [test]>  CREATE TABLE 'username' AS SELECT * FROM my_table;
ERROR 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 ''username' AS SELECT * FROM my_table' at line 1

因此,您需要使用字符串格式来创建 SQL 语句(可以使用反引号来防御 SQL 注入*):

cur.execute(""" CREATE TABLE `%s` AS SELECT * FROM original_table """ % table_name)

*我不是SQL注入方面的专家,所以如果起源于你的应用程序之外,请做一些研究。table_name


查看完整回答
反对 回复 2022-09-27
  • 1 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号