我真的有最该死的时间试图找出我收到的错误消息的原因。
我正在编写一个网络抓取工具,它使用 Python 和 BeautifulSoup 将数据从Procycing Stats 抓取到 MySQL 数据库中,用于抓取和 Peewee 进行数据库交互。网络爬虫工作得很好,但我在将数据插入 MySQL 表时遇到了一些麻烦。
首先,我使用 peewee 的create_tables()函数在空数据库中创建了表。在下面我粘贴了我的 Peewee 模型的代码,它包含在我称为peewee_lib.py.
from peewee import *
from mysql_login_info import *
results_database = MySQLDatabase(mysql_db_name, user=mysql_uname, password=mysql_pw, host='localhost')
class BaseModel(Model):
class Meta:
database = results_database
class Rider(BaseModel):
pcsid = IntegerField()
name = CharField()
class Race(BaseModel):
name = CharField()
class Result(BaseModel):
name = CharField()
year = IntegerField()
date = DateField()
position = IntegerField()
points_pcs = IntegerField()
race = ForeignKeyField(Race, backref='results')
rider = ForeignKeyField(Rider, backref='results')
接下来,我使用一个文件scrape_to_peewee.py来创建类,这些类将我的抓取库scraper_lib.py和前面提到的 peewee 库中的类定义“绑定”在一起peewee_lib.py。
这是来自的代码scrape_to_peewee.py:
import scraper_lib as pylib
import peewee_lib as pw
class Sheet_bind:
def __init__(self, rider_obj, sheet):
self.year = sheet.year
self.rider = sheet.rider
self.rows = []
for row in sheet.rows:
if row.row_type == "tour_header":
pass
else:
temp_query = pw.Race.select().where(pw.Race.name == row.race)
if not temp_query.exists():
temp_query = pw.Race(name=row.race)
temp_query.save()
else:
将这个最终文件加载到解释器中后,我尝试将示例骑手加载到数据库中。启动Rider_bind课程工作正常,我再次检查以确保一行实际上已写入我rider在 MySQL 中的表中,它有。
问题似乎与将 peewee 模型之一分配给外键字段有关。当我颠倒调用顺序以便temp_res.rider = rider_obj先出现时,它给了我同样的错误,回溯指向该调用。
从 peewee 文档看来, ForeignKey 字段应该像将另一个 peewee 类作为值分配给它们一样简单。有谁知道我在这里出了什么问题?任何帮助将非常感激。
谢谢!
慕尼黑8549860
相关分类