一 这是困扰我两天,我是python的新人,我想解析html数据如下链接:http://movie.walkerplus.com/list/2015/12/
然后将数据存储到名为movie_db的postgresql数据库中,并且有一个名为films的表,它由以下命令创建:
CREATE TABLE films (
title varchar(128) NOT NULL,
description varchar(256) NOT NULL,
directors varchar(128)[],
roles varchar(128)[]
);
我已经解析了数据,标题,描述,导演,角色有三个列表数据。例如title = [' a',.....,' b'],description = [' c',....,&#39 ; f'],导演= [' d',.....,' g'],角色= [[' f',&# 39; g','],......,[' h',' t',' u&#39 ;]]
sql =" INSERT INTO电影(标题,描述,导演,角色)
VALUES
(%s,%s,%s,%s);"
对于邮件中的obj(t,des,dirt,r):
cur.execute(cur.mogrify(sql,obj))
conn.commit()
有错误:
psycopg2.DataError: malformed array literal: "サム・メンデス"
LINE 1: ...ームズ・ボンドの戦いを描く『007』シリーズ第24作', 'サム・メ...
^
DETAIL: Array value must start with "{" or dimension information.
答案 0 :(得分:1)
我知道这个错误。这意味着您正在尝试将字符串值插入到数组列中。您可以按如下方式验证SQL。
sql2 = cur.mogrify(SQL, obj)
print sql2
从html获取的导演和角色是字符串列表。所以在zip函数之后,obj包含dir和角色作为字符串。
对于您的情况,您只想插入1行。所以可能没有必要拉链。
我对您使用的API不熟悉,但是您可以尝试在插入之前打印从html接收的值吗?我可以为您提供所需的确切SQL。
编辑关于新阵列的语法
director数组是一种简写语法,用于创建一个新数组,每个元素都作为数组。在更易读的语法中,它将与下面相同
director = ['tom', 'jack', 'john']
directors = []
for d in director:
elem_as_list = []
elem_as_list.append(d)
directors.append(elem_as_list)
print director
print directors
print type(director[0])
print type(directors[0])
这是输出
['tom', 'jack', 'john']
[['tom'], ['jack'], ['john']]
<type 'str'>
<type 'list'>