[英]MySQL dynamic query in Python
谁能告诉我在Python中执行动态MySQL查询的正确方法?
我想对CREATE和INSERT语句进行动态查询。 我在这里提到了另一篇文章:
但这没有用。
这是我尝试的代码:
sql="create table %s (%%s, %%s, %%s ... )" % (tablename,''.join(fields)+' '.join(types))
cur.execute(sql)
其中“字段”是存储在列表中的字段名称,“类型”是存储在列表中的字段类型。
Python和MySQLdb
DB API都使用%s
表示替换可能会造成混淆。 对于DB API,它主要用于避免SQL注入攻击。 在cursor.execute()
语句中,仅在需要字符串替换%s
地方使用%s
才有意义。
例如。
您希望执行以下sql:
CREATE TABLE foo (myfield INTEGER);
不
CREATE TABLE 'foo' ('myfield' INTEGER);
类似以下内容可能是合适的:
field1_name_and_type = 'myfield VARCHAR(100)'
sql="create table %s (%s)" % (tablename, field1_name_and_type)
cur.execute(sql)
然后,当您想INSERT
表中时,请在execute语句中使用%s
来转义字符串。
my_malicious_sql = input()
cur.execute('INSERT INTO %s VALUES (%%s)' % tablename, my_malicious_sql)
在此示例中,如果tablename == "foo"
,则将execute()
的第一个参数扩展为:
cur.execute('INSERT INTO foo VALUES (%s)', my_malicious_sql)
然后,MySQLdb库将正确转义my_malicious_sql
任何字符串,以避免SQL注入错误,并将文本插入数据库表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.