gpt4 book ai didi

python - psycopg2.sql 使用 sql.Identifier 插入变量类型导致类型 "integer"不存在

转载 作者:行者123 更新时间:2023-12-02 08:08:46 27 4
gpt4 key购买 nike

我正在尝试使用 psycopg2.sql 动态创建表,我编写了一个函数,该函数接受由列名和列的数据类型组成的元组列表,然后创建一个字符串,将其称为查询,使用“{}”作为占位符,如下所示:

create table {} ({} {}, {} {} ...);

我展平元组列表,以便结果列表中的元素与我想要将它们插入查询字符串的顺序相对应,并使用结果列表作为 sql.SQL(query) 中的参数。格式(...)

生成的 sql.Comcomposed 实例如下所示:

Composed([SQL('create table '), Identifier('games'), SQL(' ( '), Identifier('score_loser'), SQL(' '), Identifier('integer'), SQL(' , '), Identifier('playoffs'), SQL(' '), Identifier('boolean'), SQL(' , '), Identifier('record_loser'), SQL(' '), Identifier('integer[]'), SQL(' , '), Identifier('broadcast'), SQL(' '), Identifier('varchar(20)'), SQL(' , '), Identifier('date'), SQL(' '), Identifier('date'), SQL(' , '), Identifier('id'), SQL(' '), Identifier('varchar (30)'), SQL(' , '), Identifier('home_team'), SQL(' '), Identifier('varchar (50)'), SQL(' , '), Identifier('record_winner'), SQL(' '), Identifier('integer[]'), SQL(' , '), Identifier('winner'), SQL(' '), Identifier('varchar (50)'), SQL(' , '), Identifier('loser'), SQL(' '), Identifier('varchar (50)'), SQL(' , '), Identifier('score_winner'), SQL(' '), Identifier('integer'), SQL(' , primary key ('), Identifier('id'), SQL(') );')])

但是当我尝试执行此 sql.Composited 实例时,我收到错误“integer”不是类型,其中“integer”是我传递给格式函数的列表中的元素。

是否无法使用 psycopg2.sql 动态传递变量类型,或者如果可以,请告诉我该怎么做?

最佳答案

我也遇到过类似的问题。我通过混合字符串组合、format() 和列表生成器解决了这个问题。

data = (('column_name_1','VARCHAR(2)'), ('column_name_2','INT'))
data = ['%s %s' % (x[0], x[1]) for x in data]
columns_string = ', '.join([x for x in data])

这里columns_string ='column_name_1 VARCHAR(2),column_name_2 INT'

query = 'CREATE TABLE {}(%s)' % columns_string
query = sql.SQL(query).format(sql.Identifier('test_table'))

如果我们检查查询:

print(query.as_string(conn))

创建表“test_table”(column_name_1 VARCHAR(2),column_name_2 INT)

我们像cur.execute(query)一样执行它并且它有效。不复杂,可能不可靠的解决方案,但有效。

关于python - psycopg2.sql 使用 sql.Identifier 插入变量类型导致类型 "integer"不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55551046/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com