【问题标题】:Python Peewee: One Model Multiple TablesPython Peewee:一个模型多个表
【发布时间】:2017-10-10 22:41:43
【问题描述】:

我目前正在使用 Peewee 在 Python 上实现 SQLite,但我不知道如何将单个模型用于多个表。我需要为不同的表使用相同的模型的原因是每个表都会有大量的行。我需要在它们之间执行join() 操作,因此仅直接更改_meta.db_table 无济于事。

我已经通过 SO 搜索了类似的问题(如下所示),但它们并没有真正解决我的问题:

我的简化用例:

from peewee import *

database = SqliteDatabase('test.db')

class BaseModel(Model):
    class Meta:
        database = database

class Student(BaseModel):
    name = TextField()
    date_of_birth = DateField()

class Course(BaseModel):
    student = ForeignKeyField(rel_model=Student, to_field='id', unique=True)
    score = IntegerField()

假设我想制作多个相同型号的表Course(),例如Bio101 和 Bio201,稍后我想比较这两个课程中每个重叠学生(注册这两个课程的学生)的score

我应该如何解决这个问题,而不实际更改数据库架构/结构(由于向后兼容性)?

【问题讨论】:

    标签: python sqlite peewee


    【解决方案1】:

    我遇到了类似的问题——即,我想从同一个模型创建多个表——最终找到了解决方案。

    例如,如果您想从单个模型创建多个Course 表,您可以使用:

    from peewee import *
    
    database = SqliteDatabase('test.db')
    
    class BaseModel(Model):
        student = ForeignKeyField(rel_model=Student, to_field='id', unique=True)
        score = IntegerField()
    
        class Meta:
            database = database
    
    # Create Course 1
    class Course1(BaseModel):
        pass
    
    # Create Course 2
    class Course2(BaseModel):
        pass
    
    database.create_tables([Course1, Course2])
    

    Course1Course2 将具有相同的结构。

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多