0

重複の可能性:
tweepy ストリームから sqlite データベースへ - 無効な synatx

コードで構文エラーが発生しましたが、その原因がわかりません。これはコンソールが返すエラーで、sqlite ファイルには何も入力されていません。

Filtering the public timeline for "@lunchboxhq"
RT @LunchboxHQ: @lunchboxhq test1   LunchboxHQ  2012-02-27 17:26:14 Echofon
Encountered Exception: near "?": syntax error
@LunchboxHQ test 1  LunchboxHQ  2012-02-27 17:26:36 Echofon
Encountered Exception: near "?": syntax error
@LunchboxHQ test 2  LunchboxHQ  2012-02-27 17:26:51 Echofon
Encountered Exception: near "?": syntax error

私のsqliteファイルには次のものしかありません:

... tableTWEETSTWEETSCREATE TABLE TWEETS(txt text, author text, created int, source text)

私が間違っていることを理解するのを手伝ってもらえますか?ありがとう。コードは以下です。

import sys
import tweepy
import webbrowser
import sqlite3 as lite

# Query terms

Q = sys.argv[1:]

sqlite3file='/var/www/twitter.lbox.com/html/stream5_log.sqlite'

CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

con = lite.connect(sqlite3file)
cur = con.cursor()
cur.execute("CREATE TABLE TWEETS(txt text, author text, created int, source text)")

class CustomStreamListener(tweepy.StreamListener):

    def on_status(self, status):

        try:
            print "%s\t%s\t%s\t%s" % (status.text, 
                                      status.author.screen_name, 
                                      status.created_at, 
                                      status.source,)

            cur.executemany("INSERT INTO TWEETS(?, ?, ?, ?)", (status.text, 
                                                            status.author.screen_name, 
                                                            status.created_at, 
                                                            status.source))

        except Exception, e:
            print >> sys.stderr, 'Encountered Exception:', e
            pass

    def on_error(self, status_code):
        print >> sys.stderr, 'Encountered error with status code:', status_code
        return True # Don't kill the stream

    def on_timeout(self):
        print >> sys.stderr, 'Timeout...'
        return True # Don't kill the stream

streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60)

print >> sys.stderr, 'Filtering the public timeline for "%s"' % (' '.join(sys.argv[1:]),)

streaming_api.filter(follow=None, track=Q)
4

1 に答える 1

2

executemanyは 3 つの "?" マークがありますが、パラメーターは 4 つあります。追加の疑問符が欠落している可能性があります。また、挿入は 1 回しか行わないため、代わりにexecuteを使用する必要があります。executemanyこのような:

cur.execute("INSERT INTO TWEETS(?, ?, ?, ?)", (status.text, 
                                               status.author.screen_name, 
                                               status.created_at, 
                                               status.source))

また、これによる正しい SQLは次のようになります。

INSERT INTO TWEETS VALUES(?, ?, ?, ?)
于 2012-02-27T21:52:59.077 に答える