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

时间:2020-03-20 21:54:18

标签: python mysql sql django syntax

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

的Django文档。
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?!?

现在我不知道如何进行。

1 个答案:

答案 0 :(得分: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))+' )'])