【问题标题】:pg8000 creating a table confuses column name with typepg8000 创建表将列名与类型混淆
【发布时间】:2020-01-31 00:54:32
【问题描述】:

我在我的 python 包中使用 pg8000 作为 Postgres api。我创建了一个函数就是创建一个表是没有这样的表存在的。函数如下:

    def create_tables(self, cur, tables):

       for i, table in enumerate(tables):
            name = 'important_' + table
            query = '''CREATE TABLE IF NOT EXISTS {} (
                        {}  CHAR(9),
                        {}  DATE,
                        {}  DECIMAL,
                        {}  TIME,
                        {}  TIME,
                        {}  NUMERIC,
                        {}  CHAR,
                        {}  CHAR,
                        {}  DECIMAL 
                    )
                '''.format(name, "key", "date", "cycle_sequence", "sent_time","processed_time", "amount", "sender", "receiver", "jumbo")

            cur.execute(query)

查询运行没有错误(在程序和在线小提琴here),除了表列名称例如:“key CHAR(9)”、“date DATE”等。所以查询正在执行但不认识语法。但是根据this,查询语法是正确的。有什么建议吗?

注意 1:有一个类似的问题 here 但我没有类似的症状,因为我没有收到语法错误。我的查询成功了。

【问题讨论】:

  • 不相关,但是:don't use the char type
  • 处理此类事情的常用方法:打印生成的语句并手动运行它(例如在psql中)。然后edit您的问题并添加您收到的错误消息。
  • 我编辑了问题以扩展“工作正常”。
  • 无法识别语法”意味着它不会运行。如果它运行成功,它确实识别语法。

标签: python-3.x postgresql pg8000


【解决方案1】:

这对我来说似乎很奇怪,但“修复”是在查询的列规范部分中删除“(”之前的空格,如下所示。使用空格,(名称,类型)元组被解释为单个字符串, 没有空格,它们被正确解释为列名和类型。

query = '''CREATE TABLE IF NOT EXISTS {} (...

query = '''CREATE TABLE IF NOT EXISTS {}(...

我正在使用的记录是:PyCharm 2019.2.3(社区版)和 Anaconda 1.9.7。 db api 是 'pg8000' 包。

【讨论】:

    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多