【问题标题】:How to create a table in psql database using python?如何使用 python 在 psql 数据库中创建一个表?
【发布时间】:2021-03-21 14:05:21
【问题描述】:

我正在运行此脚本,并希望通过使用变量在 psql 查询中传递值来创建表。所以,我可以一次创建多个表。但是这条cur.execute("CREATE TABLE IF NOT EXISTS(%s, %s)",[table_name, comp_schema]) 行抛出错误。如何编写此查询来创建具有给定架构的表?

import psycopg2


conn = psycopg2.connect(database="review_check", user = "xxx", password = "xxx",)
cur = conn.cursor()
print ("Opened database successfully")    


comp_schema = """
as_of_date DATE PRIMARY KEY NOT NULL,
verified_reviews INTEGER,
lsa_total_reviews INTEGER
"""

table_name = 'comp_first'

cur.execute("CREATE TABLE IF NOT EXISTS(%s, %s)",[table_name, comp_schema])

conn.commit()
conn.close()

【问题讨论】:

  • psycopg2.errors.SyntaxError: "(" 或附近的语法错误 LINE 1: CREATE TABLE IF NOT EXISTS('comp_first',
  • 查看下面的 piro 答案以了解正确的方法。

标签: python sql postgresql psycopg2


【解决方案1】:

使用psycopg2.sql 模块动态组合查询。见https://www.psycopg.org/docs/sql.html

【讨论】:

    【解决方案2】:

    这里有几个错误,无论是 SQL 语法还是 Python:

    cur.execute("CREATE TABLE IF NOT EXISTS(%s, %s)",[table_name, comp_schema])

    应该是

    cur.execute("CREATE TABLE IF NOT EXISTS %s (%s)"%(table_name, comp_schema))

    在开发过程中,首先在单独的变量中构建查询可能更容易,然后打印它以查看它是否正确:

    test = "CREATE TABLE IF NOT EXISTS %s (%s)"%(table_name, comp_schema)
    print(test)
    
    >>CREATE TABLE IF NOT EXISTS comp_first (
      as_of_date DATE PRIMARY KEY NOT NULL,
      verified_reviews INTEGER,
      lsa_total_reviews INTEGER
      )
    

    【讨论】:

    • 请不要鼓励使用字符串组合来创建动态查询。这是SQL 注入的路径。有关如何正确执行此操作的链接,请参阅下面的@piro 答案。
    • 我的错,很公平!我没有考虑外部访问系统的情况。
    猜你喜欢
    • 2012-10-25
    • 2011-05-26
    • 1970-01-01
    • 2018-11-08
    • 2019-10-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    相关资源
    最近更新 更多