python - 如何使用 peewee 将现有数据插入 sqlite 数据库
问题描述
所以我正在研究用 peewee 创建一个 sqlite 体育数据库,我试图弄清楚如何将数据插入到已经为某些表插入的数据库中。
例如,我的这段代码在第一次循环时运行良好,但在第二次循环时抛出 IntegrityError,因为已经定义了竞技场“mackey”。
我该如何编写它,以便它在第二次运行循环时识别出“印第安纳州西拉斐特”中的“Mackey Arena”已经创建,并使用该场地_id,而不是创建第二个场地行?
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
您可以使用or或其他方式跟踪您在内存中插入的对象set
,如果您一次加载所有内容并且可能存在重复,则该方法有效。
或者,您可以捕获peewee.IntegrityError
违反 db 约束时引发的错误。例如:
try:
# Create new user. Assume a UNIQUE constraint on username.
user = User.create(username=username)
except IntegrityError:
# Already exists, grab from db.
user = User.get(User.username == username)
但是,这可能效率低下,因为如果您预计会有很多重复项,您可能会执行两个查询。要解决这个问题,您可以尝试结合我描述的两种方法。
推荐阅读
- git - 如何更改 git global user.email?
- javascript - Javascript Canvas 空白 Tizen webapp
- maven - 如何使用 Cucumber 6 和 Maven 集成集成测试
- javascript - 在 vue.js 中为 .sync 添加条件
- python - 如何使用 Beautiful Soup 获取 html 页面中两个标签之间的内容?
- c# - 无法使用 SAS 从 Azure Blob 存储中检索文件
- python - 从python中的另一个数组获取真实索引的值
- html - CSS用图像替换javascript生成的表格中的文本
- random - 随机选择 10 名受试者并保留他们的所有观察结果
- python - 合并两个 pandas.core.indexes.multi.MultiIndex