gpt4 book ai didi

python - 这些 PostgreSQL 查询之间的区别和修复错误的查询?

转载 作者:行者123 更新时间:2023-11-29 14:21:37 25 4
gpt4 key购买 nike

我正在尝试在 Python3 中使用 psycopg2 执行此查询:

query_clone_db_data = (
'CREATE DATABASE (%s) WITH TEMPLATE (%s) OWNER (%s);'
)

conn.cursor.execute(query_clone_db_data, (new_dbname, original_dbname, owner, ))

我收到此错误消息:

syntax error at or near "'my_new_database'" LINE 1: CREATE DATABASE ('my_new_database') WITH TEMPLATE 'original...

另一方面,这个查询没有任何问题:

query_get_owner_dbs = (
'SELECT d.datname, d.datallowconn, '
'pg_catalog.pg_get_userbyid(d.datdba) as owner '
'FROM pg_catalog.pg_database d '
'WHERE pg_catalog.pg_get_userbyid(d.datdba) = (%s);'
)

conn.cursor.execute(query_get_owner_dbs, (owner, ))

为什么第二个没有语法错误而第一个有?我试图删除第一个中的括号然后问题是引号......有人知道发生了什么吗?

最佳答案

Table and database names can not be parametrized .据我所知,只能参数化列值。因此,您需要进行字符串格式化:

query_clone_db_data = (
'CREATE DATABASE %s WITH TEMPLATE %s OWNER %s'
% (new_dbname, original_dbname, owner))

conn.cursor.execute(query_clone_db_data)

请确保 new_dbnameoriginal_dbnameowner 不是来自用户输入,因为字符串格式化使此代码容易受到 sql 注入(inject)攻击。

关于python - 这些 PostgreSQL 查询之间的区别和修复错误的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23540052/

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