繁体   English   中英

Python中的MySQL动态查询

[英]MySQL dynamic query in Python

谁能告诉我在Python中执行动态MySQL查询的正确方法?

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

Python中的MySQL动态查询语句

但这没有用。

这是我尝试的代码:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM