python2.7 插入列表时 MySQLdb 语法错误
python2.7 MySQLdb syntax error when inserting a list
我正在尝试将抓取的数据插入到 MySQL 数据库中......我从互联网上找到了到目前为止我需要的所有代码,但我可以理解其中的大部分...... .这是我的代码:
import MySQLdb
from bs4 import BeautifulSoup
import requests
r = requests.get("http://www.metalinjection.net/")
data = r.text
soup = BeautifulSoup(data, "lxml")
news = soup.find_all("article", {"class": "post"})
titles = []
for tits in news:
titles.append(tits.contents[3].find_all("h2", {"class": "title"})
[0].text)
print titles
images = []
for image_link in news:
images.append(image_link.img['src'])
print images
for link in news:
l1 = link.a['href']
db = MySQLdb.connect(host="localhost",
user="admin",
passwd="admin",
db="lot_data")
t2 =d2 =i2 = "die"
dbc = db.cursor()
db.set_character_set('utf8')
dbc.execute('SET NAMES utf8;')
dbc.execute('SET CHARACTER SET utf8;')
dbc.execute('SET character_set_connection=utf8;')
sql = "insert into lot_data VALUES('%s', '%s', '%s')" % \
(titles, images , "nothing")
rows = dbc.execute(sql)
db.commit()
db.close()
当我 运行 脚本时,它给出了以下错误:
Traceback (most recent call last):
File "C:/Python27/ques.py", line 32, in <module>
rows = dbc.execute(sql)
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \'The Monday Grind: MELLOW HARSHER Served Cold\', u"METALLICA\'s Former Producer Apo\' at line 1')
当我用字符串替换标题或图像时,它们可以毫无错误地插入......如果有更好、更有条理的插入方式,请指出我....
titles
和 images
是列表。您不能以这种方式直接插入列表。 insert
一次创建一行。
您需要遍历列表并在每次迭代中插入一行。
只要两个列表是对应的(长度相同,同一索引上的元素属于一起)你可以重写程序的下半部分,插入数据库的地方,像这样:
sql = "insert into lot_data VALUES(%s, %s, %s)"
for (title, imagelink) in zip(titles, images):
data = (title, imagelink, "nothing")
dbc.execute(sql, data)
此代码遍历两个列表并一一插入元素。
编辑:优化了 sql 语句。用我上面的代码替换 dbc.ececute(...
和 db.commit()
之间的现有代码。
我正在尝试将抓取的数据插入到 MySQL 数据库中......我从互联网上找到了到目前为止我需要的所有代码,但我可以理解其中的大部分...... .这是我的代码:
import MySQLdb
from bs4 import BeautifulSoup
import requests
r = requests.get("http://www.metalinjection.net/")
data = r.text
soup = BeautifulSoup(data, "lxml")
news = soup.find_all("article", {"class": "post"})
titles = []
for tits in news:
titles.append(tits.contents[3].find_all("h2", {"class": "title"})
[0].text)
print titles
images = []
for image_link in news:
images.append(image_link.img['src'])
print images
for link in news:
l1 = link.a['href']
db = MySQLdb.connect(host="localhost",
user="admin",
passwd="admin",
db="lot_data")
t2 =d2 =i2 = "die"
dbc = db.cursor()
db.set_character_set('utf8')
dbc.execute('SET NAMES utf8;')
dbc.execute('SET CHARACTER SET utf8;')
dbc.execute('SET character_set_connection=utf8;')
sql = "insert into lot_data VALUES('%s', '%s', '%s')" % \
(titles, images , "nothing")
rows = dbc.execute(sql)
db.commit()
db.close()
当我 运行 脚本时,它给出了以下错误:
Traceback (most recent call last):
File "C:/Python27/ques.py", line 32, in <module>
rows = dbc.execute(sql)
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near \'The Monday Grind: MELLOW HARSHER Served Cold\', u"METALLICA\'s Former Producer Apo\' at line 1')
当我用字符串替换标题或图像时,它们可以毫无错误地插入......如果有更好、更有条理的插入方式,请指出我....
titles
和 images
是列表。您不能以这种方式直接插入列表。 insert
一次创建一行。
您需要遍历列表并在每次迭代中插入一行。
只要两个列表是对应的(长度相同,同一索引上的元素属于一起)你可以重写程序的下半部分,插入数据库的地方,像这样:
sql = "insert into lot_data VALUES(%s, %s, %s)"
for (title, imagelink) in zip(titles, images):
data = (title, imagelink, "nothing")
dbc.execute(sql, data)
此代码遍历两个列表并一一插入元素。
编辑:优化了 sql 语句。用我上面的代码替换 dbc.ececute(...
和 db.commit()
之间的现有代码。