我正在使用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值有什么关系呢?我的问题只是关于约束而不是数据类型及其长度。
首先,如果您不按顺序排列代码,那将是一团糟。在数据库和sqlalchemy模式中具有不同的信息确实是一个坏主意。
一旦开始使用ORM,这些事情就变得非常重要。主键将用于识别内存中的对象。外键将用于自动对两个表进行查询。不确定唯一性。
我在查询相关表时,sqlalchemy将使用外键约束来创建联接。
同样,我不确定可空处理,但是我相信sqlalchemy在设置默认值时会使用它-如果可空,它可以在不知道默认值的情况下创建对象。
在序列化表数据和从对象反序列化时,这将很有用。
例如,您想在表中插入数据,您可以简单地创建一个对象,将在其中检查那些属性,然后将其保存。
company_info = CompanyInfo(id=12,name='ABC')
company_info.save()
def save(self):
self.add()
self.commit()
def commit(cls):
db.session.commit()