代码之家  ›  专栏  ›  技术社区  ›  sds Niraj Rajbhandari

如何使psycopg2不发出引号?

  •  1
  • sds Niraj Rajbhandari  · 技术社区  · 6 年前

    我想从Pytnon创建一个表:

    import psycopg2  as pg
    from psycopg2 import sql
    
    conn = pg.connect("dbname=test user=test")
    table_name = "testDB"
    column_name = "mykey"
    column_type = "bigint"
    cu = conn.cursor()
    cu.execute(sql.SQL("CREATE TABLE {t} ({c} {y})").format(
        t=sql.Identifier(table_name),
        c=sql.Identifier(column_name),
        y=sql.Literal(column_type)))
    

    唉,这散发出 CREATE TABLE "testDB" ("mykey" 'bigint') 失败的原因是

    当然,我可以做一些

    cu.execute(sql.SQL("CREATE TABLE {t} ({c} %s)" % (column_name)).format(
        t=sql.Identifier(table_name),
        c=sql.Identifier(column_name)))
    

    但我怀疑有一个更优雅(和安全!)解决方案。

    How to make psycopg2 emit nested quotes?

    1 回复  |  直到 6 年前
        1
  •  1
  •   klin    6 年前

    这里有一个例子 the documentation 如何使用占位符构建查询文本。使用 psycopg2.extensions.AsIs(object) 对于 column_type :

    query = sql.SQL("CREATE TABLE {t} ({c} %s)").format(
        t=sql.Identifier(table_name),
        c=sql.Identifier(column_name)).as_string(cu)
    
    cu.execute(query, [AsIs(column_type)])