如何用已有数据插入sqlite数据库

2024-04-26 22:46:06 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在研究用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()

Tags: namegametruedbmodelcreatedatabaseteam
1条回答
网友
1楼 · 发布于 2024-04-26 22:46:06

有很多种方法,这取决于导入数据的方式。您可以使用dictset或其他方法来跟踪插入内存中的对象,如果您一次加载了所有内容,并且可能存在重复项,则可以使用这种方法。在

或者,您可以捕获违反db约束时引发的peewee.IntegrityError错误。例如:

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)

但是,这可能是低效的,因为如果您预期有大量重复项,则可能要执行两个查询。为了解决这个问题,您可以尝试将我描述的两种方法结合起来。在

相关问题 更多 >