2012-10-23 62 views
0

我是新來的蟒蛇,我只是用暴風與Python作爲基本ORM開始。蟒蛇風暴ORM,避免重複

我有很多數據在文件中,也有一些重複,並找出他們,你可以看到一些行是重複的ID。

我想將它們插入到我的數據庫,我沒有設定ID是主鍵,所以不能有重複。 我希望我的代碼忽略在表中插入數據,如果它是重複的。但是,相反的,只不過沒有用_mysql_exceptions.IntegrityError: (1062, "Duplicate entry '75083587476530022' for key 'PRIMARY'")

這是我的課

from storm.locals import * 

class Board(object): 
    __storm_table__ = 'boards' 
    id = Int(primary=True) 
    description = Unicode() 
    category = Unicode() 

    def __init__(self, val): 
    self.id = val['id'] 
    self.description = val['description'] 
    self.category = val['category'] 

,並創建一個行我做了定義:

database = create_database('mysql://[email protected]/mydb') 
store = Store(database) 
data = {u'description': u'', u'id': 165366686256470180, u'category': u'Children'} 
store.add(Board(data)) 
store.commit() 
store.flush() 

而且我知道在MYSQL,我可以做

ON DUPLICATE KEY UPDATE o 

任何想法如何使暴風使用呢?

回答

2

我會寫一個python腳本,SQL插入之前刪除重複。否則,您必須提交每一行,捕獲異常並忽略該行。哪個不好。擁有乾淨的數據並一次性完成所有事情會更好。 SQL實際上只關心表操作,而不關心數據的完整性。

0

如果你想讓DB搞定,我會建議:

from MySQLdb import IntegrityError 
# You connected to DB and have your store 
# You loaded your data inside data_list 
for data_row in data_list: 
    try: 
     store.add(Board(data_row)) 
     store.flush() # This is enough to raise any DB error 
    except IntegrityError: 
     continue # You can probably log something here 
store.commit()