如果Alembic已经定义了架构,则使用sqlalchemy定义的架构有什么关系?

问题描述 投票:0回答:2

我正在使用Alembic进行数据库迁移。并使用sqlalchemy使用python连接到数据库。在Alembic中,我们将表模式定义为第一个版本,而这是创建模式的实际版本。例如,我在第一个Alembic版本中给出了这样的架构。

op.create_table(
        'my_table',
        sa.Column('id', sa.String(10), primary_key=True),
        sa.Column('mail', sa.String(20), unique=True)
)

现在,让我们进入sqlalchemy部分。在我的python项目中,我有一个数据库连接文件,在其中创建了这样的用户表。

class CompanyInfo(Base):
    __tablename__ = 'my_table'

    id = Column(String(10), primary_key=False)
    name = Column(String(20), unique=False)

[这里,Alembic是连接数据库并创建表的第一件事。那么我在python类中指定primary_key,唯一约束还是nullable = T / F值有什么关系呢?我的问题只是关于约束而不是数据类型及其长度。

python mysql sqlalchemy alembic sqlalchemy-migrate
2个回答
0
投票

首先,如果您不按顺序排列代码,那将是一团糟。在数据库和sqlalchemy模式中具有不同的信息确实是一个坏主意。

一旦开始使用ORM,这些事情就变得非常重要。主键将用于识别内存中的对象。外键将用于自动对两个表进行查询。不确定唯一性。

我在查询相关表时,sqlalchemy将使用外键约束来创建联接。

同样,我不确定可空处理,但是我相信sqlalchemy在设置默认值时会使用它-如果可空,它可以在不知道默认值的情况下创建对象。


0
投票

在序列化表数据和从对象反序列化时,这将很有用。

例如,您想在表中插入数据,您可以简单地创建一个对象,将在其中检查那些属性,然后将其保存。

company_info = CompanyInfo(id=12,name='ABC')
company_info.save()


def save(self):
    self.add()
    self.commit()
def commit(cls):
    db.session.commit()
© www.soinside.com 2019 - 2024. All rights reserved.