数据以以下格式显示:
members
我正在将这些数据写入表格:
tags_list = [
['foo'],
['foo', 'boo', 'goo'],
['boo', 'zoo']
]
但是这样,表格中的数据变为for tags in tags_list:
cursor.execute("""INSERT INTO tags_table VALUES (%s);""", (tags,))
:
tuple
虽然我期待:
(['foo'],)
(['foo', 'boo', 'goo'],)
(['boo', 'zoo'],)
是否可以将数据转换为普通的PostgreSQL的ARRAY视图?
答案 0 :(得分:2)
我只需按照sql
:
CREATE TABLE contacts (
id serial PRIMARY KEY,
name VARCHAR (100),
phones TEXT []
);
我假设您使用pydb
并且我创建了一个类似于以下节目的表
id | name | phones
----+------+--------------
1 | | {123,222,33}
我的python代码只是简单地插入到一个列表中。
import pgdb
conn = pgdb.connect(database='test')
cur = conn.cursor()
lst = ['123','222','33']
cur.execute('insert into contacts(phones) values (%s)', (lst,))
conn.commit()
它为我工作!我猜你没有commit
你的光标或你的字段类型不对!
回到你的例子,我创建了一个类似你的表:
CREATE TABLE tags_table(tags TEXT[]);
在运行我的python代码之前,请检查表。
test=# select * from tags_table;
tags
------
(0 rows)
和我的python代码:
#import pgdb
#conn = pgdb.connect(database='test')
#if psycopg2 has used
#try this
import psycopg2
conn = psycopg2.connect(database='test')
cursor = conn.cursor()
tags_list = [
['foo'],
['foo', 'boo', 'goo'],
['boo', 'zoo']
]
for tags in tags_list:
cursor.execute("""INSERT INTO tags_table(tags) VALUES (%s);""", (tags,))
conn.commit()
运行上面的代码后,我的表得到了这些结果:
test=# select * from tags_table;
tags
---------------
{foo}
{foo,boo,goo}
{boo,zoo}
(3 rows)
我真的不明白为什么你需要将结果显示为{}
,但有一种简单的方法可以通过声明自己的List
类型来实现。
class MyList(list):
def __str__(self):
items = ','.join(self)
return '{' +'{}'.format(items if items else '') + '}'
def __repr__(self):
return self.__str__()
for i in d:
j = MyList(i[0])
print j
你将得到如下显示的结果!
{foo}
{foo,boo,goo}
{boo,zoo}
{foo}
{foo,boo,goo}
{boo,zoo}
答案 1 :(得分:0)
这是一些妥协解决方案:
cursor.execute("""SELECT * FROM tags_table;""")
rows = cursor.fetchall()
for row in rows:
print(row[0])
¯\ _(ツ)_ /¯