python - 使用 psycopg2 将列名作为参数传递给 PostgreSQL

标签 python sql postgresql parameters psycopg2

我正在尝试使用 psycopg2 向表中添加列

row1 下面是要添加到表中的列名列表。我可以手动执行此操作,但当我尝试以编程方式执行此操作时,出现错误。

for c in row1:
    cur.execute("ALTER TABLE HHV2PUB ADD COLUMN %s text", (c,))

错误是:

    cur.execute("ALTER TABLE HHV2PUB ADD COLUMN %s text", (c,))
psycopg2.ProgrammingError: syntax error at or near "'HOUSEID'"
LINE 1: ALTER TABLE HHV2PUB ADD COLUMN 'HOUSEID' text

我的猜测是它与单引号 ''

有关

最佳答案

从 Psycopg 2.7 开始,有保险箱 sql module :

from psycopg2 import sql

query = sql.SQL("alter table t add column {} text")

row1 = ('col1', 'col2')
for c in row1:
    cursor.execute(query.format(sql.Identifier(c)))

2.6 及更早版本:

使用 psycopg2.extensions.AsIs

Adapter conform to the ISQLQuote protocol useful for objects whose string representation is already valid as SQL representation.

import psycopg2
from psycopg2.extensions import AsIs

conn = psycopg2.connect("host=localhost4 port=5432 dbname=cpn")
cursor = conn.cursor()

query = "alter table t add column %s text"

row1 = ('col1', 'col2')
for c in row1:
    cursor.execute(query, (AsIs(c),))
conn.commit()

关于python - 使用 psycopg2 将列名作为参数传递给 PostgreSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27289957/

相关文章:

mysql - 具有来自不同表的字段的人员列表

sql - 从 linux shell 读取带有 SQL 查询的 CSV 文件

.net - IQueryable 的 Linq Count() 与 IEnumerable 的 Linq Count()

django - 当数据库(PostgreSQL)分区时,如何从Django(版本1.5)管理添加记录?

sql - 使用 Liquibase 创建 Postgres Varchar 数组列

java - 如何在java中将pdf十六进制字符串(由postgres生成)转换为字节数组?

Python - Pandas - 将整个 excel 文件提取为字符串

python - 使用python opencv检测刻度线

python - Yappi 返回奇怪的结果

python - 为什么 2.__add__(3) 在 Python 中不起作用?