Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python风暴ORM和避免重复_Python_Orm_Storm Orm - Fatal编程技术网

python风暴ORM和避免重复

python风暴ORM和避免重复,python,orm,storm-orm,Python,Orm,Storm Orm,我是python新手,刚开始使用Storm和python作为基本的ORM 我在一个文件中有很多数据,并且有一些重复的数据,为了识别它们,你可以看到一些行的ID是重复的 我想把它们插入我的数据库,我把id设置为主键,这样它就不会有重复项了。 我希望我的代码忽略在表中插入重复的数据。相反,它只是在出现异常时失败了。IntegrityError:(1062,“密钥“PRIMARY”的重复条目“75083587476530022”) 这是我们班的定义 from storm.locals import *

我是python新手,刚开始使用Storm和python作为基本的ORM

我在一个文件中有很多数据,并且有一些重复的数据,为了识别它们,你可以看到一些行的ID是重复的

我想把它们插入我的数据库,我把id设置为主键,这样它就不会有重复项了。 我希望我的代码忽略在表中插入重复的数据。相反,它只是在出现异常时失败了。IntegrityError:(1062,“密钥“PRIMARY”的重复条目“75083587476530022”)

这是我们班的定义

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://root@/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

知道如何让Storm使用它吗?

我会编写一个python脚本,在SQL插入之前删除重复。否则,您必须提交每一行,捕获异常并忽略该行。这不好。最好是拥有干净的数据并一次性提交所有数据。SQL实际上只关心表操作,而不关心数据完整性

如果你想让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()