Python 如果Alembic已经定义了模式,那么使用sqlalchemy定义的模式又有什么关系呢?

Python 如果Alembic已经定义了模式,那么使用sqlalchemy定义的模式又有什么关系呢?,python,mysql,sqlalchemy,alembic,sqlalchemy-migrate,Python,Mysql,Sqlalchemy,Alembic,Sqlalchemy Migrate,我正在使用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)

我正在使用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)
)
现在,让我们来看看炼金术部分。在python项目中,我有一个数据库连接文件,我在其中创建了如下用户表。

class CompanyInfo(Base):
    __tablename__ = 'my_table'

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

在这里,Alembic是连接到数据库并创建表的第一件事。那么,在python类中指定primary_key、unique constraint还是nullable=T/F值又有什么关系呢

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

首先,如果您不保持代码有序,它将是一个血淋淋的烂摊子。在数据库和sqlalchemy模式中使用不同的信息确实是个坏主意

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

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


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

这在序列化表数据和从对象反序列化时非常有用

例如,若要在表中插入数据,只需创建一个对象,在其中检查这些属性,然后保存即可

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


def save(self):
    self.add()
    self.commit()
def commit(cls):
    db.session.commit()

我的意图不是要破坏这个结构。我只是想知道,当约束不匹配时,它将如何影响功能。