我实际上是从主页下载提要并尝试将它们写入 MySQL 数据库。提要以 RSS 形式发布。无需创建唯一 ID,一切工作正常。所以Insert命令一定是错误的!
这是我的代码:
import feedparser
import urllib2
import cookielib
import MySQLdb
import time
import datetime
from cookielib import CookieJar
from urllib2 import urlopen
db = MySQLdb.connect(host="localhost", # your host, usually localhost
user="root", # your username - SELECT * FROM mysql.user
passwd="****", # your password
db="sentiment_analysis") # name of the data base
cur = db.cursor()
cur.execute("DROP TABLE IF EXISTS feeddata_lse")
sql = """CREATE TABLE feeddata_lse (LSE_ID INT NOT NULL AUTO_INCREMENT,PRIMARY KEY(LSE_ID),Unix_Timesstamp integer, III_Timestamp varchar(255), Source varchar(255), Title varchar(255), Text TEXT, Link varchar(255), Epic varchar(255), CommentNr integer, Author varchar(255))"""
cur.execute(sql)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(CookieJar()))
opener.addheaders = [{'User-agent','Mozilla/5.0'}]
def feed_load(feed):
return [(time.time(),
entry.published,
'lse',
entry.title,
entry.summary,
entry.link,
(entry.link.split('?ShareTicker=')[1]).split('&post=')[0],
entry.link.split('&post=')[1],
entry.author)
for entry
in feedparser.parse(feed).entries]
def main():
FEED_URL = "http://www.lse.co.uk/chat/recent/"
feed = feed_load(FEED_URL)
print feed[1][1]
for item in feed:
cur.execute("""INSERT INTO feeddata_lse VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)""",item)
db.commit()
如果我将 LSE_ID INT NOT NULL AUTO_INCRMENT, PRIMARY KEY(LSE_ID)
删除到 Insert 语句中,一切都会正常。我更改插入部分的主要问题是 RSS 提要包含提要列表,而每个提要都是另一个列表。
感谢您帮助我。请用代码示例解释您的论点,因为我非常缺乏经验。如果您有任何疑问,请随时提问!
这是错误报告:
Traceback (most recent call last):
File "C:/Python27/MySQL_finalversion/rss_db_connection_mysql_v1.py", line 54, in <module>
main()
File "C:/Python27/MySQL_finalversion/rss_db_connection_mysql_v1.py", line 48, in main
cur.execute("""INSERT INTO feeddata_lse VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s)""",item)
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
OperationalError: (1136, "Column count doesn't match value count at row 1")
最佳答案
LSE_ID INT NOT NULL AUTO_INCRMENT, PRIMARY KEY(LSE_ID)
行出现在表创建语句中,而不是插入语句中。如果您从表创建语句中删除一列,但保持 INSERT 语句不变,您确实会收到“列计数与值不匹配”错误,因为您试图插入比表中定义的列多的列。
我想您会发现您实际上想要保留该主键。不要从表创建语句中删除 LSE_ID INT NOT NULL AUTO_INCRMENT, PRIMARY KEY(LSE_ID)
,而是尝试在 INSERT 语句中显式命名列,如下所示?
插入 feeddata_lse(Unix_Timesstamp, III_Timestamp, Source, Title, Text, Link, Epic, CommentNr, Author) VALUES (%s,%s,
...
关于mysql - 在数据库中插入列表元素时创建 MySQL 唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24513910/