我真的有最该死的时间试图找出我收到的错误消息的原因。我正在编写一个网络抓取工具,它使用 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_databaseclass 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 pylibimport peewee_lib as pwclass 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 类作为值分配给它们一样简单。有谁知道我在这里出了什么问题?任何帮助将非常感激。谢谢!
1 回答
慕尼黑8549860
TA贡献1818条经验 获得超11个赞
分配给属性时,您需要将“temp_query”解析为对象。
if not temp_query.exists():
temp_query = pw.Race(name=row.race)
temp_query.save()
else:
temp_query = temp_query.get() # fixed.
添加回答
举报
0/150
提交
取消