小编use*_*003的帖子

Base.metadata 在 Sqlalchemy 中如何工作?

代码/示例

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
Run Code Online (Sandbox Code Playgroud)

如果我运行print(Base)然后我得到结果:

<class 'sqlalchemy.ext.declarative.api.Base'>
Run Code Online (Sandbox Code Playgroud)

(即Base是由函数创建的类declarative_base)。

如果我跑print(Base.metadata)然后我得到

Metadata(bind=engine(postgres//:user:password@host/database))
Run Code Online (Sandbox Code Playgroud)

但如果是一个类并且是一个对象,那么究竟如何print(Base.metadata)运行呢?Basemetadata

两者是如何联系的?

我可以理解元数据是否是一个类属性,但据我了解,它不是,那么它是如何工作的呢?

我错过了 python 语法中的某些内容吗?

查看元数据代码:

from sqlalchemy import MetaData
metadata = MetaData()
Run Code Online (Sandbox Code Playgroud)

metadata这里和的定义是什么MetaData?它们都是对象吗?是MetaData()函数还是别的什么?

根据 SQLAlchemy 文档MetaData是:

一个容器对象,它将所描述的数据库(或多个数据库)的许多不同功能组合在一起。

但如果它是一个对象,那么它如何像函数一样运行:Metadata()

概括:

  • 如果一个是类,另一个是对象,那么Base和是如何联系的?metadata
  • Base.metadata如何运行命令( )?
  • metadata和和之间有什么区别? 的定义MetaData是什么MetaData()

python sqlalchemy

4
推荐指数
1
解决办法
9418
查看次数

使用 sqlalchemy、alembic 将列动态添加到现有表

我想动态地将列添加到数据库中的表中,因为我不想在 SQLalchemy 类中设置表时指定所有列

为了解决这个问题,我使用 alembic 将列添加到表中,但我遇到了问题。

在我的 python 脚本中,我定义了一个类,如下所示。

DATABASE_URL_dev = "postgresql+psycopg2://user:password@localhost:5432/testdb"

engine = create_engine(DATABASE_URL_dev)
Base = declarative_base(engine)


class my_class1(Base):
    __tablename__ = "test1"

    id = Column(Integer, primary_key=True)
    list = Column(String)

def  loadsession():
    Base.metadata.create_all(engine)
    Session = sessionmaker(bind=engine)
    session = Session()
    return session

session = loadsession()
Run Code Online (Sandbox Code Playgroud)

现在我想向数据库中的表 test1 添加一个新列(“new_column”)。

然后,我使用 Alembic 按照https://alembic.sqlalchemy.org/en/latest/tutorial.html上的说明进行操作,并执行了以下操作:

  1. 通过运行 pip install alembic 安装了 alembic
  2. 使用 alembic init alembic 创建环境
  3. 通过在 sqlalchemy.url 输入“postgresql+psycopg2://user:password@localhost:5432/testdb”来编辑 .ini 文件
  4. 通过运行 alembic revision -m "add a column " 创建迁移脚本
  5. 然后,我通过在 Upgrade() 中添加以下“op.add_column('test1', sa.Column('new_column', …

python sqlalchemy alembic

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

sqlalchemy ×2

alembic ×1