2016-02-08 3 views
0
user = "'" + "@%s" % data['user']['screen_name'] + "'" 
coordinates = "'" + ",".join(str(e)for e in data['coordinates']['coordinates']) + "'" 
tweet = "'" + data['text'].encode("ascii", "ignore") + "'" 
query = "INSERT INTO tweets (location, tweet, author) values (" + coordinates + "," + tweet + "," + user + ")" 

У меня возникли проблемы с твитами, у которых есть апостроф (') или произвольные кавычки, которые разбивают запрос на вставку. Любые советы будут оценены, так как я хотел бы уменьшить ошибки из вставки твитов. БлагодаряПроблемы с котировками в python twitter streamer

Пример сообщения об ошибке:

(1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Stadium https://t.co/uJ2U2tcXlr','@Pucker21')' at line 1") 

ответ

0

Это одна из причин, почему вы не должны вручную построить запрос с помощью интерполяции строк.

Вместо этого пусть драйвер базы данных справиться с этим:

query = """ 
    INSERT INTO 
     tweets 
     (location, tweet, author) 
    VALUES 
     (%s, %s, %s) 
""" 
cursor.execute(query, (coordinates, tweet, user)) 

Здесь мы создаем параметризованный запрос, то %s заполнители для драйвера базы данных для заполнения. Драйвер MySQL будет обрабатывать правильное цитирование, экранирование и сделать запрос безопасным от SQL-инъекций.

+0

А я вижу. Я отредактирую свой класс mysql_connector, чтобы разрешить ввод этих трех переменных. Thanks – logepoge1

+0

другой вопрос. Теперь мои координаты завернуты кавычками. Любой способ предотвратить это? Они должны быть переданы как 1.1111,1.1111, но вместо этого передаются как «1.1111,1.1111» – logepoge1

+0

@ logepoge1, потому что они теперь имеют строковый тип. Отправьте запрос create table для таблицы 'tweets'. Я хочу видеть типы столбцов. Благодарю. – alecxe

Смежные вопросы