簡體   English   中英

如何將python mysql.connector和報紙庫混合使用?

[英]How to mix python mysql.connector and newspaper libraries?

我目前正在制作一個程序,該程序可搜索BBC新聞網站,並使用mysql.connector和報紙庫將每個標題添加到MySQL數據庫中。 我已經編寫了以下代碼,但是運行時什么也沒有發生,我想知道自己做錯了什么嗎? 抱歉,這只是一個簡單的錯誤:)

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.")

當前,您既不會使用模運算符將article.title插入到SQL字符串中,也不會使用引號將字符串文字括起來。 另外,請注意:字符串模格式是用於字符串格式的舊的, 不推薦的版本 ,已取消強調 ,但未正式棄用。

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

實際上, sql返回的元組不是cur.execute()期望的第一個參數。

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

您可能打算將查詢參數化為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM