我真的有最該死的時間試圖找出我收到的錯誤消息的原因。我正在編寫一個網絡抓取工具,它使用 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
提交
取消