我正在使用psycopg2与Python2.7中的PostgreSQL数据库进行交互。
psycopg2首先在varchar字段中将列表保存在数据库中,然后我只需要返回相同的Python列表。
插入:
data = ['value', 'second value']
with psycopg2.connect(**DATABASE_CONFIG) as connection:
cursor = connection.cursor()
cursor.execute("INSERT INTO table_name (varchar_field) VALUES (%s)", (data)
connection.commit()
在pgAdmin中,它看起来像:{value,second_value}
然后我尝试做这样的事情:
with psycopg2.connect(**DATABASE_CONFIG) as connection:
cursor = connection.cursor()
cursor.execute("SELECT varchar_field FROM table_name")
for row in cursor:
for data_item in row: # here I want to iterate through the saved list (['value', 'second_value']), but it returns string: '{value, second_value}'
print data_item
我找到possible solution,但我不知道如何在我的代码中实现它。
那么,如何从sql ARRAY类型中检索回Python列表?
答案 0 :(得分:1)
假设:
CREATE TABLE pgarray ( x text[] );
INSERT INTO pgarray(x) VALUES (ARRAY['ab','cd','ef']);
然后psycopg2
将为您解决数组解包问题。观察:
>>> import psycopg2
>>> conn = psycopg2.connect('dbname=regress')
>>> curs = conn.cursor()
>>> curs.execute('SELECT x FROM pgarray;')
>>> row = curs.fetchone()
>>> row
(['ab', 'cd', 'ef'],)
>>> row[0][0]
'ab'
>>> print( ', '.join(row[0]))
ab, cd, ef
答案 1 :(得分:0)
psycopg2已经为你做了。如果PostgreSQL列类型是文本数组,即text [],你应该得到一个字符串的python列表。只是尝试访问查询返回的第一个项而不是整个结果元组:
for row in cursor:
for data_item in row[0]:
# Note the index '0' ^ here.
print data_item