2016-07-31 2 views
0

Я пытаюсь извлечь текст, долготу и широту из tweepy StreamListener, а затем сохранить данные в моей базе данных SQL. Я могу хранить координаты в порядке, но по какой-то причине unicode не работает. Для SQL у меня есть:Вставка юникода в базу данных MySQL из сценария python

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

Для моего питона сценария я (не включая основной()):

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 

Пожалуйста, обратите внимание, что я новичок так что любой совет ценится.

+0

Попробуйте запустить 'SET NAMES UTF8;' в оболочке MySQL. –

+0

ALTER TABLE tweets CONVERT TO CHARACTER SET utf8mb4 – MONTYHS

+0

Как сказал @MONTYHS, просто измените таблицу, чтобы принять unicode. Его данные и ваша база данных, поэтому просто изменить базу данных, чтобы принять unicode, на сегодняшний день является самым простым и самым правильным решением, на мой взгляд, для вашей ситуации. Этот раздел, известный как «кодировка строк», может быть подавляющим для разработчиков. Не подвешивайте их на начальном уровне. Обратите внимание: вы можете использовать MySQL Workbench в качестве графического интерфейса для управления администрированием и таблицей. Это может быть очень удобно. – Dan

ответ

0

Вы должны never использовать интерполяцию строк для создания SQL-команд. Используйте подстановку параметров, предоставляемую соединителем SQL.

mycursor.execute('INSERT INTO tweets (tweet, lat, lng) VALUES (%s,%s,%s)', 
        (status.text, status.coordinates['coordinates'][0], status.coordinates['coordinates'][1])) 
Смежные вопросы