0

我正在使用 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值有什么关系呢?

我的问题只是关于数据类型和长度的约束。

4

2 回答 2

0

首先,如果您不保持代码井井有条,那将是一团糟。在数据库和 sqlalchemy 模式中拥有不同的信息确实是个坏主意。

一旦你开始使用 ORM,这些东西就变得非常重要。主键将用于标识内存中的对象。外键将用于自动对两个表进行查询。不确定是否独特。

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

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

于 2020-03-05T06:55:49.763 回答
0

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

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

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


def save(self):
    self.add()
    self.commit()
def commit(cls):
    db.session.commit()
于 2020-03-05T07:30:16.893 回答