2017-12-14 3 views
2

데이터는 형식으로 제공됩니다형식 배열 데이터는

for tags in tags_list: 
    cursor.execute("""INSERT INTO tags_table VALUES (%s);""", (tags,)) 

하지만이 방법은 테이블의 데이터는 tuple를 입력된다 :

(['foo'],) 
(['foo', 'boo', 'goo'],) 
(['boo', 'zoo'],) 

나는 기대하고있어 동안 :

{'foo'} 
{'foo', 'boo', 'goo'} 
{'boo', 'zoo'} 

데이터를 일반적인 PostgreSQL의 ARRAY보기로 변환 할 수 있습니까? sql를 수행하여

+0

패스'tags' 대신 (태그)''의. –

+0

테이블 구조를 여기에 넣을 수 있습니까 ~ –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ 그렇다면'문자열 형식을 변환하는 동안 모든 인수가 변환되지 않았습니다 ' –

답변

2

나는 간단한 테이블을 만들 :

CREATE TABLE contacts (
id serial PRIMARY KEY, 
name VARCHAR (100), 
phones TEXT [] 
); 

을 당신이 사용 pydb 있다고 가정하고 있는데 아래 표와 같은 테이블을 생성해야

id | name | phones  
----+------+-------------- 
    1 |  | {123,222,33} 

내 파이썬 코드는 간단하다 하나의 목록에 삽입하십시오.

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[]); 

하기 전에 : 위로 예

, 난 당신 같은 테이블을 만들 수 있습니다.
test=# select * from tags_table; 
tags 
------ 
(0 rows) 

내 파이썬 코드 : 당신이 보여해야하는 이유

test=# select * from tags_table; 
    tags  
--------------- 
{foo} 
{foo,boo,goo} 
{boo,zoo} 
(3 rows) 

난 정말 이해가 안 :

#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() 

위의 코드를 실행 한 후, 내 표는 그 결과를 가지고 결과는 {}으로 표시되지만 사용자가 직접 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} 
+0

실제로 콘솔 아래에서 올바르게 보입니다. –

+0

무엇이 오류입니까? 파이썬 스크립트에서 테이블을 검사 할 때 –

+1

을 출력 할 수 있습니까? 테이블의 데이터 유형은'tuple'입니다. –

0

는 여기에 몇 가지 타협 솔루션입니다 :

cursor.execute("""SELECT * FROM tags_table;""") 
rows = cursor.fetchall() 
for row in rows: 
    print(row[0]) 

¯ \ _ (ツ) _/¯