python:将列表数据插入数据库

时间:2016-06-01 15:17:39

标签: python sql postgresql list insert

有一个名为movie_db的postgresql数据库,并创建了一个名为films的表,如下所示:

CREATE TABLE movies (
 title       varchar(128) NOT NULL,
 description varchar(256) NOT NULL,
 directors   varchar(128)[],
 roles       varchar(128)[]
 );

我有四个标题,描述,导演,角色列表。 例如(可能是一个大型列表而不仅仅是三个元素)。

title = ['a', 'b', 'c']
description = ['good love', 'sun beautiful', 'wind go']
director = ['tom', 'jack', 'john']
roles=[['kate', 'back', 'jon'], ['tian', 'den', 'lucy'], ['cruse', 'jodan', 'peter']]

我想将这些列表数据插入到表格中,我怎样才能使用python sql来处理它,我想得到如下表所示的结果,请注意角色不仅仅有一个名字,有时候有三个名字,比如kate,back,jon

 title          description    director       roles

  a               good love      tom        kate, back, jon    
  b               sun beautiful  jack       tian,  den,  lucy
  c               wind go        john       cruse, jodan, peter 

我使用以下python代码:

 cur.execute('insert into film_test(title, description, directors, 
 roles)values(%s, %s, %s, %s)', title, description, director, roles)

但是有错误:

 TypeError: function takes at most 2 arguments (5 given)

你可以使用python插入表中,谢谢!

1 个答案:

答案 0 :(得分:2)

psycopg2 非常支持数组插入。这可能会有所帮助。

import psycopg2

conn = psycopg2.connect(database="postgres")
cur = conn.cursor()

title = ['a', 'b', 'c']
description = ['good love', 'sun beautiful', 'wind go']
director = ['tom', 'jack', 'john']
directors = [ [d, ] for d in director ]
roles=[['kate', 'back', 'jon'], ['tian', 'den', 'lucy'], ['cruse', 'jodan', 'peter']]

sql = "INSERT INTO movies (title, description, directors, roles) VALUES (%s, %s, %s, %s);"
for obj in zip(title, description, directors, roles):
    cur.execute(cur.mogrify(sql, obj))
conn.commit()

cur.close()
conn.close()