sqlalchemy.exc.IntegrityError

sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (_mysql_exceptions.IntegrityError) (1062, "Duplicate entry '區塊鏈:構建自己的加密貨幣' for key 'ix_course_name'") [SQL: 'INSERT INTO course (created_at, updated_at, name, author_id, description, image_url) VALUES (%s, %s, %s, %s, %s, %s)'] [parameters: (datetime.datetime(2018, 5, 16, 1, 58, 48, 206337), datetime.datetime(2018, 5, 16, 1, 58, 48, 206337), '區塊鏈:構建自己的加密貨幣', 3, '本訓練營以“構建自己的加密貨幣”爲練習項目,選擇非常主流的Ethereum(以太坊)作爲區塊鏈開發平臺。讓大家在不依賴框架的情況下,手動操作編譯、部署等過程,更有利於理解開發流程及模塊間交互。在完成項目的過程中,循序漸進地掌握區塊鏈開發技能。', 'https://dn-simplecloud.shiyanlou.com/1507600436048.png')] (Background on this error at: http://sqlalche.me/e/gkpj)

這個問題反反覆覆出現,剛開始,我找不準錯誤出現在哪裏,我以爲是這一句:

sqlalchemy.exc.IntegrityError: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely)

於是在網上找了半天資料,覺得可能是autoflush。我看到一些文章說應該設置爲false。所以我改成了下面這樣:

db = SQLAlchemy(session_options={"autoflush": False})

然後在shell裏面運行,想往數據庫裏面插入數據,結果錯誤變成了這樣:

sqlalchemy.exc.IntegrityError:  (1062, "Duplicate entry '區塊鏈:構建自己的加密貨幣' for key 'ix_course_name'") [SQL: 'INSERT INTO course (created_at, updated_at, name, author_id, description, image_url) VALUES (%s, %s, %s, %s, %s, %s)'] [parameters: (datetime.datetime(2018, 5, 16, 1, 58, 48, 206337), datetime.datetime(2018, 5, 16, 1, 58, 48, 206337), '區塊鏈:構建自己的加密貨幣', 3, '本訓練營以“構建自己的加密貨幣”爲練習項目,選擇非常主流的Ethereum(以太坊)作爲區塊鏈開發平臺。讓大家在不依賴框架的情況下,手動操作編譯、部署等過程,更有利於理解開發流程及模塊間交互。在完成項目的過程中,循序漸進地掌握區塊鏈開發技能。', 'https://dn-simplecloud.shiyanlou.com/1507600436048.png')] (Background on this error at: http://sqlalche.me/e/gkpj)

所以說不是autoflush的鍋。然後我看到下面這一句,

“Duplicate entry ‘區塊鏈:構建自己的加密貨幣’ for key ‘ix_course_name”
我覺得應該是重複插入了,因爲我把name這個字段設置爲unique,但是我否定了我的這個想法,因爲我的數據是從一個網站上面爬下來的,那個網站上的數據就沒有重複的。

ps:扒下來的數據類似於這樣:

{"name": "\u533a\u5757\u94fe\uff1a\u6784\u5efa\u81ea\u5df1\u7684\u52a0\u5bc6\u8d27\u5e01", "description": "\u672c\u8bad\u7ec3\u8425\u4ee5\u201c\u6784\u5efa\u81ea\u5df1\u7684\u52a0\u5bc6\u8d27\u5e01\u201d\u4e3a\u7ec3\u4e60\u9879\u76ee\uff0c\u9009\u62e9\u975e\u5e38\u4e3b\u6d41\u7684Ethereum\uff08\u4ee5\u592a\u574a\uff09\u4f5c\u4e3a\u533a\u5757\u94fe\u5f00\u53d1\u5e73\u53f0\u3002\u8ba9\u5927\u5bb6\u5728\u4e0d\u4f9d\u8d56\u6846\u67b6\u7684\u60c5\u51b5\u4e0b\uff0c\u624b\u52a8\u64cd\u4f5c\u7f16\u8bd1\u3001\u90e8\u7f72\u7b49\u8fc7\u7a0b\uff0c\u66f4\u6709\u5229\u4e8e\u7406\u89e3\u5f00\u53d1\u6d41\u7a0b\u53ca\u6a21\u5757\u95f4\u4ea4\u4e92\u3002\u5728\u5b8c\u6210\u9879\u76ee\u7684\u8fc7\u7a0b\u4e2d\uff0c\u5faa\u5e8f\u6e10\u8fdb\u5730\u638c\u63e1\u533a\u5757\u94fe\u5f00\u53d1\u6280\u80fd\u3002", "image_url": "https://dn-simplecloud.shiyanlou.com/1507600436048.png"}

然後我不停地百度,並沒有什麼結果。最後心血來潮檢查了一下數據,結果真的重複了。。。原來那個爬蟲我運行了好幾次。。。

後來把所有的數據刪掉,重新執行了爬蟲,再次把數據插入到數據庫,這次沒問題啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章