2016-07-31 3 views
0

tweepy StreamListener에서 텍스트, 위도 및 위도를 검색하고 SQL 데이터베이스에 데이터를 저장하려고합니다. 좌표를 저장할 수 있지만 어떤 이유로 유니 코드가 작동하지 않습니다. 는 SQL에 대한 내가 가진 :Python 스크립트에서 MySQL 데이터베이스에 유니 코드 삽입하기

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

MySQL 쉘에서'SET NAMES UTF8;'을 실행하십시오. –

+0

ALTER TABLE tweets 문자 집합으로 변환 utf8mb4 – MONTYHS

+0

@MONTYHS에서 말했듯이 유니 코드를 허용하도록 표를 변경하십시오. 그것의 데이터와 데이터베이스, 그래서 유니 코드를 받아들이도록 데이터베이스를 변경하는 것은 당신의 상황에 대한 제 의견으로는 가장 간단하고 정확한 해결책입니다. "문자열 인코딩"이라고하는이 주제는 개발자에게 압도적 인 것일 수 있습니다. 초보자 수준에서 이것들에 매달 리지 마라. MySQL Workbench를 그래픽 프론트 엔드로 사용하여 관리 및 테이블 변경을 처리 할 수 ​​있습니다. 매우 편리 할 수 ​​있습니다. – Dan

답변

0

절대은 SQL 명령을 만들기 위해 문자열 보간을 사용합니다. SQL 커넥터가 제공하는 매개 변수 대체를 사용하십시오.

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