【发布时间】: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