有一个名为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插入表中,谢谢!
答案 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()