2016-07-31 30 views
0

Ich versuche, den Text, die Länge und den Breitengrad von einem Tweepy StreamListener abzurufen und dann die Daten in meiner SQL-Datenbank zu speichern. Ich kann die Koordinaten gut speichern, aber aus irgendeinem Grund funktioniert der Unicode nicht. Für den SQL Ich habe:Einfügen von Unicode in MySQL-Datenbank aus Python-Skript

mysql> CREATE TABLE tweets (tweet nvarchar(140), lat float(10,6) not null, lng float(10,6) not null) engine=myisam; 

Für meinen Python-Skript Ich habe (ohne den main()):

import mysql.connector 
from tweepy import Stream 
from tweepy import OAuthHandler 
from tweepy.streaming import StreamListener 
from authenticator import Authenticator 
import json 


#connecting to mysql database 
conn = mysql.connector.connect(user='root', password='arlenyu123',host='localhost',database='twitter') 
mycursor = conn.cursor() 


class MyStreamListener(StreamListener): 

    def on_status(self, status): 
     if status.coordinates is not None: 
      #for some reason the status text isn't being fed into the database properly... not sure why. 
      mycursor.execute('INSERT INTO tweets (tweet, lat, lng) VALUES ({},{},{})'. 
       format(status.text, status.coordinates['coordinates'][0], status.coordinates['coordinates'][1])) 
    return True 

def on_error(self, status_code): 
    if status_code == 403: 
     print("The request is understood, but it has been refused or access is not allowed. Limit is maybe reached") 
     return False 

Bitte beachten Sie, dass ich ein Anfänger bin so wird jede Beratung geschätzt.

+0

Versuchen Sie 'SET NAMES UTF8;' in der MySQL-Shell auszuführen. –

+0

ALTER TABLE-Tweets KONVERTIEREN IN CHARAKTERSET utf8mb4 – MONTYHS

+0

Wie @MONTYHS sagte, ändern Sie einfach die Tabelle, um Unicode zu akzeptieren. Es ist Ihre Daten und Ihre Datenbank, also ändern Sie einfach die Datenbank, um Unicode zu akzeptieren ist bei weitem die einfachste und korrekteste Lösung meiner Meinung nach für Ihre Situation. Dieses Thema, das als "String Encoding" bekannt ist, kann für Entwickler überwältigend sein. Lassen Sie sich nicht davon auf einem Anfänger Level hängen. Beachten Sie, dass Sie MySQL Workbench als grafisches Frontend zur Verwaltung und Änderung der Tabelle verwenden können. Es kann sehr praktisch sein. – Dan

Antwort

0

Sie sollten nie verwenden Zeichenfolge Interpolation zum Erstellen von SQL-Befehlen. Verwenden Sie die Parameterersetzung, die vom SQL-Connector bereitgestellt wird.

mycursor.execute('INSERT INTO tweets (tweet, lat, lng) VALUES (%s,%s,%s)', 
        (status.text, status.coordinates['coordinates'][0], status.coordinates['coordinates'][1]))