Max*_*Max 5 python postgresql psycopg2
我想用psycopg2的sql子模块来写干净的动态SQL:
from psycopg2 import sql
...
cursor.execute(sql.SQL("SELECT * FROM {}").format(sql.Identifier('myschema.mytable'))
Run Code Online (Sandbox Code Playgroud)
这将创建以下查询:
SELECT * FROM "myschema.mytable"
Run Code Online (Sandbox Code Playgroud)
在这里我得到一个Relation "myschema.mytable" not found.例外。
如何正确处理架构名称?以下语句可以工作,但如何使用 psycopg2 创建它们?
SELECT * FROM myschema.mytable
SELECT * FROM myschema."mytable"
SELECT * FROM "myschema"."mytable"
Run Code Online (Sandbox Code Playgroud)
编辑:澄清架构前缀
那个工程
sql.Identifier('myschema.mytable')
Run Code Online (Sandbox Code Playgroud)
被视为单引号标识符,从生成的查询中可以看出。您应该将架构和表名作为单独的标识符传递以进行格式化:
cursor.execute(sql.SQL("SELECT * FROM {}.{}").format(
sql.Identifier('myschema'),
sql.Identifier('mytable'))
Run Code Online (Sandbox Code Playgroud)
请注意,模式和表名必须完全匹配,大小写和全部匹配,因为psycopg2的SQL 字符串组合工具生成带引号的标识符,并且带引号的标识符区分大小写。
| 归档时间: |
|
| 查看次数: |
3234 次 |
| 最近记录: |