首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的动态查询

问MySQL中的动态查询
EN

Stack Overflow用户
提问于 2013-05-29 06:25:45
回答 1查看 3.8K关注 0票数 0

有人能告诉我用Python执行动态MySQL查询的正确方式吗?

我想对CREATE和INSERT语句进行动态查询。我在这里提到了另一篇文章:

MySQL Dynamic Query Statement in Python

但没起作用。

下面是我尝试的代码:

代码语言:javascript
复制
sql="create table %s (%%s, %%s, %%s ... )" % (tablename,''.join(fields)+' '.join(types))
cur.execute(sql)     

其中“字段”是存储在列表中的字段名,而“类型”是存储在列表中的字段类型。

EN

回答 1

Stack Overflow用户

发布于 2013-05-29 07:03:55

Python都使用MySQLdb来表示替换,这可能会让人感到困惑。对于DB,它主要用于避免SQL注入攻击。在cursor.execute()语句中,只有在需要字符串替换的地方使用%s才有意义。

例如:

您希望执行以下sql:

代码语言:javascript
复制
CREATE TABLE foo (myfield INTEGER);

不

代码语言:javascript
复制
CREATE TABLE 'foo' ('myfield' INTEGER);

下面这样的内容可能是合适的:

代码语言:javascript
复制
field1_name_and_type = 'myfield VARCHAR(100)'
sql="create table %s (%s)" % (tablename, field1_name_and_type)
cur.execute(sql)

然后,当您想要将INSERT放入表中时,请使用execute语句中的%s转义字符串。

代码语言:javascript
复制
my_malicious_sql = input()
cur.execute('INSERT INTO %s VALUES (%%s)' % tablename, my_malicious_sql)

在这个例子中,execute()的第一个参数是这样展开的,如果是tablename == "foo"

代码语言:javascript
复制
cur.execute('INSERT INTO foo VALUES (%s)', my_malicious_sql)

然后,MySQLdb库将正确转义my_malicious_sql中的任何字符串,以避免出现SQL错误,并将文本插入到数据库表中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16806889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档