我处理一个有40多w条的数据的文本,每次取了1w条数据然后存入数据库。我用sqlalchemy
定义了下面几个表:
class Position(Base):
__tablename__ = 'position'
id = Column(...)
name = Column(...)
city_id = Column(Integer, ForeignKey('city.id'))
class City(Base):
__tablename__ = 'city'
id = Column(...)
name = Column(...)
positions = relationship('Position', backref='city')
我是这样处理的,每读到1w条数据,就保存到队列中去,然后开一个线程去队列的数据,用sqlalchemy
的session.add_all(objs)
插入1w条数据,但是我在创建Position
对象的时候,是这样的:
city = session.query(City).filter_by(name=name)
if city is None:
city = City(name=name)
position = Position(name=name)
position.city = city
这样因为是插入的1w条数据,相同的city
可能会重复的插入,因为查询判断的时候之前的city
还没有插入进去,导致会插入重复的数据。
我对数据库不是很熟悉,将City
的name
设置为unique
是否有用?或者每次用session.add(obj)
插入一条,但是这样速度是不是很慢?
求各位大神给意见啊!!!!