IntegrityError:使用praw在Python中的数据类型不匹配

时间:2015-02-10 04:12:59

标签: python sqlite praw

我正在尝试编写一个reddit机器人,它接受了#34; fuck"并看看有多少人在reddit上说。这是代码:

import praw
import time
import re
import sqlite3

username = "LewisTheRobot"
password = "lewismenelaws"

conn = sqlite3.connect('reddit')
c = conn.cursor()
r = praw.Reddit(user_agent = "Reddit bot")

word_to_match = [r'\bfuck\b', r'\bfucking\b', r'\bfucks\b']

storage = []

r.login(username, password)

def run_bot():
    subreddit = r.get_subreddit("all")
    print("Grabbing subreddit!")
    comments = subreddit.get_comments(limit=200)
    print("Grabbing comments!")
    for comment in comments:
        comment_text = comment.body.lower()
        isMatch = any(re.search(string, comment_text) for string in word_to_match)
        if comment.id not in storage and isMatch and comment.author not in storage:
            print("We have found a fuck boy. Storing username: " + str(comment.author) + "into database.")
            storage.append(comment.author)
            c.execute("INSERT INTO users (id, Username, subreddit, comment) VALUES(?,?,?,?)", (str(comment.id), str(comment.author), str(comment.subreddit), str(comment.body)))
            conn.commit()

    print("There are currently " + str(len(storage)) + " fuck boys on reddit at the moment.")



while True:
    run_bot()
    time.sleep(2)

每当我运行僵尸程序时,只要找到匹配项就会崩溃并给我这个错误。enter image description here

据我所知,这意味着数据库中的某些内容不是要插入我的数据库的正确数据类型。我很确定它是SQL设置的str(comment.body)部分。我的SQLITE数据库将注释字段作为文本字段。谢谢你的帮助。

以下是数据库浏览器中显示的数据库凭据。 enter image description here

2 个答案:

答案 0 :(得分:8)

使用IntegrityError作为str(comment.id)的insert语句产生ID,这是一个字符串,而不是模式所需的整数。

但是因为那不起作用。由于comment.idcogqssp一样,您需要更改架构。字段ID属于TEXT类型。然后你的原始代码就可以了。

答案 1 :(得分:1)

好吧想通了。我的ID字段的数据类型是一个整数,但reddit的ID用于注释。例如:" cogr0o4"。所以我将其更改为数据类型" TEXT"并使sql语句将其转换为字符串。