【问题标题】:How to create a single table using SqlAlchemy declarative_base如何使用 SqlAlchemy declarative_base 创建单个表
【发布时间】:2017-07-22 22:21:30
【问题描述】:

要创建User 表,我必须使用drop_all,然后使用create_all 方法。但是这两个函数会重新启动整个数据库。我想知道是否有一种方法可以创建 User 表而不擦除(或删除)数据库中的任何现有表?

import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()


class User(Base):
    __tablename__ = 'users'
    id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
    name = sqlalchemy.Column(sqlalchemy.String)

    def __init__(self, code=None, *args, **kwargs):
        self.name = name


url = 'postgresql+psycopg2://user:pass@01.02.03.04/my_db'
engine = sqlalchemy.create_engine(url)
session = sqlalchemy.orm.scoped_session(sqlalchemy.orm.sessionmaker())
session.configure(bind=engine, autoflush=False, expire_on_commit=False)

Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)

【问题讨论】:

  • 为什么你“必须”在create_all之前执行drop_all?如果没有其他问题,create_all 应该没问题。而且您通常会对 alembic 和迁移感兴趣。
  • MetaData.drop_all() 删除存储在所述元数据中的所有表,而不是所有存储在 DB 中的表。

标签: python sql sqlalchemy declarative


【解决方案1】:

你可以create/drop individual tables:

User.__table__.drop(engine)
User.__table__.create(engine)

【讨论】:

  • 似乎使用绑定不起作用。知道如何使用它吗? TIA!
【解决方案2】:
from app import db
from models import User

User.__table__.create(db.engine)
User.__table__.drop(db.engine)

【讨论】:

    【解决方案3】:

    完成任务的另一种方式:

    Base.metadata.tables['users'].create(engine)
    Base.metadata.tables['users'].drop(engine)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 2023-02-02
      • 2020-08-26
      • 2021-09-04
      • 2013-10-11
      • 2015-05-04
      • 1970-01-01
      相关资源
      最近更新 更多