因此,我正在研究用peewee创建一个sqlite体育数据库,并试图找出如何将数据插入到已经为某些表插入的数据库中。在
例如,我的代码在第一次循环中运行良好,但是在第二次循环中抛出IntegrityError,因为arena“mackey”已经定义。在
我如何编写它,以便它第二次运行循环时识别出“印第安纳州西拉斐特”中的“麦基竞技场”已经创建,并使用该场馆标识,而不是创建第二个场馆行?在
from peewee import *
db = SqliteDatabase('pndb.db')
class Venue(Model):
Name = CharField(unique = True)
City = CharField()
State = CharField()
class Meta:
database = db
class Team(Model):
Name = CharField(unique = True)
class Meta:
database = db
class Game(Model):
DateTime = DateTimeField()
NeutralSite = BooleanField()
ConferenceMatchup = BooleanField()
venue = ForeignKeyField(Venue)
Attendance = IntegerField()
Status = CharField()
class Meta:
database = db
class TeamGame(Model):
game = ForeignKeyField(Game)
team = ForeignKeyField(Team)
HomeAway = CharField()
class Meta:
database = db
db.connect()
db.create_tables([Game,Venue,TeamGame,Team])
from datetime import date
for i in range(1,5):
mackey = Venue.create(Name = 'Mackey Arena',City = 'West Lafayette',State = 'Indiana')
purdue = Team.create(Name = 'Purdue')
pGame = Game.create(DateTime = date(2019,i,2),NeutralSite = False, ConferenceMatchup = True, venue = mackey,Attendance = 3000,Status = 'completed')
tG = TeamGame.create(game = pGame,team = purdue, HomeAway = 'Home')
tG.save()
有很多种方法,这取决于导入数据的方式。您可以使用
dict
或set
或其他方法来跟踪插入内存中的对象,如果您一次加载了所有内容,并且可能存在重复项,则可以使用这种方法。在或者,您可以捕获违反db约束时引发的
peewee.IntegrityError
错误。例如:但是,这可能是低效的,因为如果您预期有大量重复项,则可能要执行两个查询。为了解决这个问题,您可以尝试将我描述的两种方法结合起来。在
相关问题 更多 >
编程相关推荐