python - 关于向mysql数据库插入数据
问题描述
CODE:
import mysql.connector
from bs4 import BeautifulSoup
import requests
URL = "https://parade.com/937586/parade/life-quotes/"
web_page = requests.get(URL)
soup = BeautifulSoup(web_page.text, "html.parser")
quote = [(x.get_text(strip=True, separator=" ")) for x in soup.select(
'span[data-parade-type="promoarea"] .figure_block ~ p')]
db = mysql.connector.Connect(
host="127.0.0.1",
user="root",
password="Demon@",
database="my_quotes",
charset="utf8mb4"
)
mycursor = db.cursor()
sql = "INSERT INTO quoteslist (id, Quotes) VALUES (%S,%S)"
mycursor.execute(sql, quote)
db.commit()
db.close()
输出错误:
line 32, in <module>mycursor.execute(sql, quote)
mysql.connector.errors.ProgrammingError: Not all parameters were
used in the SQL statement
在这段代码中,我对 URL 中的所有引号进行了 WebScraping,我想将数据存储到 msql。所以,我创建了与 mysql 服务器的连接 python 服务器并创建了 DATABASE,创建了表列 Quotes 和 id,当插入数据时,我尝试同时使用 execute 或 executemany 来存储多行数据。但是它出现错误,任何人都可以建议我哪一行代码出错了。
解决方案
在您的原始代码中,'quote' 变量只是一个字符串列表。但是,您的插入需要两个值。因此,您需要将字符串拆分为其组成部分 - 即 ID 和实际报价。但是,此特定数据集中存在一个问题,因为引号中的第一个标记不一定是数字 - 因此您需要考虑到这一点。尝试这个:-
import mysql.connector as MYSQL
import requests
URL = 'https://parade.com/937586/parade/life-quotes/'
SQL = 'INSERT INTO quoteslist (id, Quotes) VALUES (%s,%s)'
CONFIG = {
'user': 'root',
'password': 'Demon@',
'host': '127.0.0.1',
'database': 'my_quotes',
'charset': 'utf8mb4'
}
SELECT = 'span[data-parade-type="promoarea"] .figure_block ~ p'
GT = {'strip': True, 'separator': ' '}
with requests.Session() as session:
web_page = session.get(URL)
web_page.raise_for_status()
soup = BeautifulSoup(web_page.text, "html.parser")
quote = [(x.get_text(**GT)) for x in soup.select(SELECT)]
with MYSQL.Connect(**CONFIG) as db:
mycursor = db.cursor()
for q in quote:
idx = q.split()[0]
if idx[0].isdigit():
text = q[len(idx):].strip()
params = (idx.replace('.', ''), text)
mycursor.execute(SQL, params)
db.commit()
请注意,引号中的第一个标记(当它是一个可行的索引号时)以句点('.')结尾,所以我删除了它
推荐阅读
- python - 将 TensorFlow 中的梯度除以一个值
- javascript - 节点js中出现意外的命令行语法错误
- gtk3 - 使用 css 设置 gtk textview 选择颜色
- javascript - SetState 和 PreviousState 的计时问题
- html - 无法在 Google 电子表格中正确获取 XPath 代码
- javascript - 在全局范围内查找和调用 javascript 函数
- nginx - Nginx proxy_pass :"使用 http://app_server 或 http:/xxxx:8000/uri/ 的参数数量无效;
- kubernetes - kubectl 使用秘密配置中的 env var 运行
- machine-learning - Google Cloud ML Engine:在训练/预测之前应用自定义函数
- apache-spark - Python Spark - 在镶木地板文件中转义引号