gpt4 book ai didi

python - Python 中的 MySQL 动态查询

转载 作者:行者123 更新时间:2023-11-30 01:36:30 25 4
gpt4 key购买 nike

谁能告诉我在 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)

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

最佳答案

Python 和 MySQLdb DB API 都使用 %s 来表示替换,这可能会令人困惑。对于DB API来说,主要是用来避免SQL注入(inject)攻击。在 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到表中时,请在执行语句中使用%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 注入(inject)错误,并将文本插入数据库表中。

关于python - Python 中的 MySQL 动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16806889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com