1.出现的问题:
这几天在学习python的数据获取,而爬的数据是豆瓣的top250的250部电影的部分信息,在将所有的数据的信息存入数据库的movie250表时出现错误,如下图所示:
我发现一共有250条电影的数据,录入到第八个的时候就报错了,如下图:
因此可以推断出是在执行第八部电影的sql语句:cur.execute(sql)出现问题。打印每行的sql语句,调试到第八部电影停止,如下图所示
感觉是sql语句的问题,就把第八部电影的sql语句放到数据库console中执行一下,果然是sql语句的错误:
仔细观察sql语句发现:原来是 单引号 的使用不当导致的
insert into movie250 (info_link,pic_link,c_name,e_name,score,rated,intro,info) values ('https://movie.douban.com/subject/1295124/','https://img2.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg','辛德勒的名单',' Schindler's List','9.5','834850','拯救一个人,就是拯救整个世界 ','导演: 史蒂文·斯皮尔伯格 Steven Spielberg 主演: 连姆·尼森 Liam Neeson...1993 美国 剧情 历史 战争')
在数据中有一项:电影英文名:’ Schindler’s List’,原先是 Schindler’s List是个整体,但是由于数据的内部有个 ’ 导致单引号匹配不一致。
2.解决办法
只要把’ Schindler’s List’ 修改为 " Schindler’s List" ,内部的独立的单引号就不会和外面的双引号匹配了。
# 5.存储数据 ---- DataBase
def save_data2(datalist, db_path):
# 4.1 好歹有个数据库
init_db(db_path)
# 插入动态的数据
conn = sqlite3.connect(db_path)
cur = conn.cursor()
for data in datalist:
for index in range(len(data)):
# 将一行电影的每一项都用双引号括起来 --- !!!之前用单引号报错
# data[index] = "'" + data[index] + "'" ----> 之前报错了!!
data[index] = '"' + data[index] + '"'
sql = '''
insert into movie250 (info_link,pic_link,c_name,e_name,score,rated,intro,info) values (%s)
''' % (",".join(data))
print(sql)
cur.execute(sql)
conn.commit()
cur.close()
conn.close()
删除之前的数据库,再次运行程序查看:
控制输出正常,所有数据录入到数据库的movie250表中。
查看数据库中movie250表,也打印到250部停止: