pg8000 创建 table 混淆了列名和类型
pg8000 creating a table confuses column name with type
我在 python 包中使用 Postgres api 的 pg8000。我创建了一个函数,即创建一个 table 不存在这样的 table。函数如下:
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)
查询运行没有错误(在程序和在线 fiddle here) except that the table column names are for example: "key CHAR(9)", "date DATE", etc. So the query is executing but not recognizing the syntax. But the query syntax is correct according to this 中。有什么提示吗?
注意 1:有一个类似的问题 但我没有类似的症状,因为我没有得到语法错误。我查询成功了。
这对我来说似乎很奇怪,但是 'fix' 是在查询的列规范部分中删除 '(' 之前的 space,如下所示。使用 space (name, type) 元组被解释为单个字符串,没有 space 它们被正确解释为列名和类型。
query = '''CREATE TABLE IF NOT EXISTS {} (...
query = '''CREATE TABLE IF NOT EXISTS {}(...
郑重声明,我使用的是:PyCharm 2019.2.3(社区版)和 Anaconda 1.9.7。 db api 是 'pg8000' 包。
我在 python 包中使用 Postgres api 的 pg8000。我创建了一个函数,即创建一个 table 不存在这样的 table。函数如下:
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)
查询运行没有错误(在程序和在线 fiddle here) except that the table column names are for example: "key CHAR(9)", "date DATE", etc. So the query is executing but not recognizing the syntax. But the query syntax is correct according to this 中。有什么提示吗?
注意 1:有一个类似的问题
这对我来说似乎很奇怪,但是 'fix' 是在查询的列规范部分中删除 '(' 之前的 space,如下所示。使用 space (name, type) 元组被解释为单个字符串,没有 space 它们被正确解释为列名和类型。
query = '''CREATE TABLE IF NOT EXISTS {} (...
query = '''CREATE TABLE IF NOT EXISTS {}(...
郑重声明,我使用的是:PyCharm 2019.2.3(社区版)和 Anaconda 1.9.7。 db api 是 'pg8000' 包。