亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

嘗試使用 Peewee 輸入外鍵字段時出現 AttributeError

嘗試使用 Peewee 輸入外鍵字段時出現 AttributeError

慕絲7291255 2021-09-02 16:06:56
我真的有最該死的時間試圖找出我收到的錯誤消息的原因。我正在編寫一個網絡抓取工具,它使用 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.


查看完整回答
反對 回復 2021-09-02
  • 1 回答
  • 0 關注
  • 279 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號