mysql - 在数据库中插入列表元素时创建 MySQL 唯一 ID

标签 mysql sql rss

我实际上是从主页下载提要并尝试将它们写入 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/

相关文章:

mysql - 从 ID 号生成唯一的序列号

python - 使用 Python 和 %s 运算符将 Excel 工作表中的值添加到 MySQL 表

sql - TSQL where 情况

bash - 具有 OPML 支持的 RSSTail 替代方案?

python - 使用 mysql-python 执行不同的查询

c# - 将大量整数加入 LINQ 查询

MySQL concat UNION GROUP BY 行结果

xml - atom feed xmlns 属性搞乱了 AS3 的 XML 解析?

IOS 如何使用 nsscanner 类查找完整的 rss 提要链接

mysql(innodb)外键约束问题