Как смешать Python mysql.connector и газетные библиотеки? - PullRequest
0 голосов
/ 11 февраля 2019

В настоящее время я создаю программу, которая выполняет поиск по сайту BBC News и добавляет каждый заголовок в базу данных MySQL, используя библиотеки mysql.connector и газеты.Я написал следующий код, но ничего не происходит, когда я запускаю его, мне было интересно, что я делаю не так?Извиняюсь, если это простая ошибка:)

import mysql.connector
import newspaper

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="",
  database="headlines"
)

search = newspaper.build('https://www.bbc.co.uk/news')
for article in search.articles:
    mycursor = mydb.cursor()

    sql = "insert into headlines (headline) values (%s)", (article.title)

    mycursor.execute(sql)

    mydb.commit()

    print(mycursor.rowcount, "headlines inserted.")

1 Ответ

0 голосов
/ 11 февраля 2019

В настоящее время вы не интерполируете article.title в строку SQL с оператором по модулю и не заключаете строковые литералы в кавычки.Кроме того, обратите внимание: форматирование строки по модулю является старой, нерекомендованной версией для форматирования строки, не подчеркивается , но официально не рекомендуется.

sql = "insert into headlines (headline) values (%s)", (article.title)

Фактически, sql возвращается как кортеж, который не является ожидаемым первым аргументом в cur.execute()

print(type(sql))
# <class 'tuple'>

Возможно, вы имели в виду параметризацию вашегоquery как заполнитель MySQL, %s, похож на строковый заполнитель по модулю.Делая это правильно, вы избегаете любой интерполяции строк или кавычек:

# INITIALIZE CURSOR OUTSIDE LOOP
mycursor = mydb.cursor()

# PREPARED STATEMENT (SCALAR STRING)
sql = "insert into headlines (headline) values (%s)"

search = newspaper.build('https://www.bbc.co.uk/news')

for article in search.articles:
    # BIND PARAM AS ONE-ITEM TUPLE
    mycursor.execute(sql, (article.title,))
    mydb.commit()

    # print(mycursor.rowcount, "headlines inserted.")   -- rowcount IS N/A FOR ACTION QUERIES
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...