我有以下示例值;
lst = [{'title': 'Guld för Odermatt i schweizisk dubbel', 'summary': '', 'link': '``https://www.dn.se/sport/guld-for-odermatt-i-schweizisk-dubbel/``', 'topic': ['empty', 'empty', 'empty', 'empty', 'empty', 'empty', 'SamhalleKonflikter', 'empty', 'empty', 'empty']} , {'title': 'Bengt Hall blir ny tillförordnad vd på Malmö Opera', 'summary': '', 'link': '``https://www.dn.se/kultur/bengt-hall-blir-ny-tillforordnad-vd-pa-malmo-opera/``', 'topic': ['empty', 'empty', 'empty', 'empty', 'empty', 'empty', 'SamhalleKonflikter', 'empty', 'empty', 'empty']} , {'title': 'Fyra gripna för grova narkotikabrott', 'summary': '', 'link': '``https://www.dn.se/sverige/fyra-gripna-for-grova-narkotikabrott/``', 'topic': ['empty', 'empty', 'empty', 'empty', 'empty', 'empty', 'SamhalleKonflikter', 'empty', 'empty', 'empty']}]
我厌倦了使用以下脚本将它们插入到我的数据库中;
# Connect to MySQL server `cnxn = mysql.connector.connect(` `host="localhost",` `user="root",` `password="password",` `database="NewsExtractDb"` `)`
# Create a cursor object cursor = cnxn.cursor()
sql = "INSERT INTO database (title, summary, link, topic) VALUES (%s, %s, %s, %s)" params = [(item['title'], item['summary'], item['link'], ', '.join(item['topic'])) for item in lst] cursor.executemany(sql, params)cnxn.commit()
但我不断收到此错误;
文件“C:\Python311\Lib\site-packages\mysql\connector\connection_cext.py”,第 616 行,在 cmd_query 中 引发 get_mysql_Exception( mysql.connector.errors.ProgrammingError: 1064 (42000): 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“数据库(标题、摘要、链接、主题)值”附近使用的正确语法(第 1 行的“Guld för Odermatt i schweizisk”
我已经厌倦了用 for 循环语句而不是“executemany”重写代码;
sql = "INSERT INTO database (title, summary, link, topic) VALUES (%s, %s, %s, %s)"
for item in lst:values = (item['title'], item['summary'], item['link'], ', '.join(item['topic']))cursor.execute(sql, values)
但我最终仍然遇到相同的错误,但无法修复。有什么想法吗?
P粉8250797982024-01-17 09:44:56
“INSERT INTO”语句之后应该有有效的表名。但在您的查询中,表名称是“database”,这是表名称的无效标识符。要将数据插入表中,首先必须在 NewsExtractDb 数据库中创建该表。你可以试试这个:
使用NewsExtractDb;
创建表newstable( 标题 nvarchar(255), 摘要 nvarchar(255), 链接 nvarchar(255), 主题 nvarchar(500) );
并更改sql查询如下:
sql =“插入新闻表(标题、摘要、链接、主题)值(%s、%s、%s、%s)”
在此之后,您的代码应该可以正常运行。