psycopg2 cursor.execute() 传入变量 table 名称和项目
psycopg2 cursor.execute() pass in variable table names and items
我试图使用 psycopg2 从 postgres 数据库中的特定 table 获取一组对象。我所看到的关于将变量传递给 cursor.execute(SQL) 命令的所有建议似乎都不适用于两种类型的变量
这是我最先厌倦但没有用的方法:
SQL = 'SELECT * FROM %s WHERE created_on < date (%s);'
cursor.execute(SQL,[(table_name), (time_from)])
这总是在插入 table_name 的地方返回语法错误
这是我的解决方案:
SQL1 = 'SELECT * FROM %s' %table_name
SQL2 = SQL1+' WHERE created_on < date (%s);'
cursor.execute(SQL2, (time_from, ))
table 名称无法以正常方式传递,因为它们在 SQL 命令中被转换为对象
正如 Antoine 的评论所述,documentation 现在建议使用这种方法来组成 table 个名称。
from psycopg2 import sql
cur.execute(
sql.SQL("insert into {} values (%s, %s)")
.format(sql.Identifier('my_table')),
[10, 20])
我试图使用 psycopg2 从 postgres 数据库中的特定 table 获取一组对象。我所看到的关于将变量传递给 cursor.execute(SQL) 命令的所有建议似乎都不适用于两种类型的变量
这是我最先厌倦但没有用的方法:
SQL = 'SELECT * FROM %s WHERE created_on < date (%s);'
cursor.execute(SQL,[(table_name), (time_from)])
这总是在插入 table_name 的地方返回语法错误
这是我的解决方案:
SQL1 = 'SELECT * FROM %s' %table_name
SQL2 = SQL1+' WHERE created_on < date (%s);'
cursor.execute(SQL2, (time_from, ))
table 名称无法以正常方式传递,因为它们在 SQL 命令中被转换为对象
正如 Antoine 的评论所述,documentation 现在建议使用这种方法来组成 table 个名称。
from psycopg2 import sql
cur.execute(
sql.SQL("insert into {} values (%s, %s)")
.format(sql.Identifier('my_table')),
[10, 20])