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



有人能告诉我我的语法有什么问题吗?从两天起,我就试图在这个问题上得到一个像样的答案,但人们是给我减分,还是让我参考我已经读过的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_例外情况。编程错误:(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?!?

现在我不知道该怎么办了。

首先,如果这些引号在%s周围,我认为你不应该使用"%s",因为这会让你的数据库免受sql注入攻击

其次,我认为你必须使用connection.cursor,如下所示:

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

相关内容

  • 没有找到相关文章

最新更新