Django |使用查询参数创建表原始查询执行

问题描述 投票:0回答:1

可以请别人告诉我我的语法有什么问题吗?自2天以来,我尝试在此问题上得到一个不错的答案,但有人会给我减分,还是让我参考我已经读过的Django文档https://docs.djangoproject.com/en/3.0/topics/db/sql/

tablename = '2020-10-table'
v_col = ["userID int(11)", "TID varchar(128)", "CID varchar(128)", "SID varchar(255)", "Timestamp bigint(20)", "LX int(10)", "LocY int(10)", "Width int(10)", "Height int(10)", "Tag varchar(512)"]

connection.execute("""CREATE TABLE IF NOT EXISTS `%s` %s""", [tablename, '( '+str(', '.join(v_col))+' )'])

我一直收到这个:

MySQLdb._exceptions.ProgrammingError:(1064,“您在您的SQL语法;检查与您的MySQL对应的手册在``(userID int(11),TI附近使用正确语法的服务器版本......

任何人都可以指出我的问题吗?

更新:

我发现Django在内部将我的字符串作为字节字符串处理:

b"CREATE TABLE IF NOT EXISTS `'2020-10-table'` '(userID int(11), TID varchar(128), CID varchar(128), SID varchar(255), Timestamp bigint(20), LX int(10), LocY int(10), Width int(10), Height int(10), Tag varchar(512))'"

这显然不是有效的sql?!?

现在我不知道如何继续。

python mysql sql django syntax
1个回答
0
投票

首先,我认为您不应该使用'%s',如果这些引用在%s周围,因为这会使您的数据库不受SQL注入攻击的影响

第二,我认为您必须像这样使用connection.cursor:

with connection.cursor() as cursor:
      cursor.execute("""CREATE TABLE IF NOT EXISTS %s %s""", [tablename, '( '+str(', 
      '.join(v_col))+' )'])
© www.soinside.com 2019 - 2024. All rights reserved.