有人能告诉我用Python执行动态MySQL查询的正确方式吗?
我想对CREATE和INSERT语句进行动态查询。我在这里提到了另一篇文章:
MySQL Dynamic Query Statement in Python
但没起作用。
下面是我尝试的代码:
sql="create table %s (%%s, %%s, %%s ... )" % (tablename,''.join(fields)+' '.join(types))
cur.execute(sql) 其中“字段”是存储在列表中的字段名,而“类型”是存储在列表中的字段类型。
发布于 2013-05-29 07:03:55
Python都使用MySQLdb来表示替换,这可能会让人感到困惑。对于DB,它主要用于避免SQL注入攻击。在cursor.execute()语句中,只有在需要字符串替换的地方使用%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)在这个例子中,execute()的第一个参数是这样展开的,如果是tablename == "foo"
cur.execute('INSERT INTO foo VALUES (%s)', my_malicious_sql)然后,MySQLdb库将正确转义my_malicious_sql中的任何字符串,以避免出现SQL错误,并将文本插入到数据库表中。
https://stackoverflow.com/questions/16806889
复制相似问题