【问题标题】:sqlalchemy orm skip already-existing tables on createsqlalchemy orm 在创建时跳过已经存在的表
【发布时间】:2017-12-04 17:12:07
【问题描述】:

当我尝试创建数据库中已存在的表时,如何避免 sqlalchemy orm 中的此异常:

sqlalchemy.exc.InvalidRequestError:表 'col1' 已为此 MetaData 实例定义。指定 'extend_existing=True' 以重新定义现有 Table 对象上的选项和列。

Base = automap_base()
Base.prepare(engine, reflect=True)

class Col1(Base):
    __tablename__ = 'col1'
    id = Column(Integer(), primary_key=True)
    name = Column(String())

Base.metadata.create_all(engine)

【问题讨论】:

  • 发生这种情况是因为您在同一个 MetaData 实例中声明一个同名的表,而不是因为您要创建一个表同一个数据库中的同名。在同一个MetaData 实例中有一个同名的表,因为您正在反映数据库中的表,并且数据库中有一个同名的表。如果您已经从数据库中反映了新表,为什么还要声明它?如果你只是想要一个 ORM 类,也许automap 会有所帮助。
  • 我正在声明一个新表 bcz 我不确定它是否存在。

标签: python sqlalchemy


【解决方案1】:

我需要添加 {'useexisting': True}

class Col1(Base):
    __tablename__ = 'col1'
    __table_args__ = {'useexisting': True}
    id = Column(Integer(), primary_key=True)
    name = Column(String())

【讨论】:

  • __table_args__上的参数哪里找的,我看了表配置文档也没找到。
猜你喜欢
  • 2012-08-07
  • 2020-03-03
  • 2020-09-21
  • 2018-06-09
  • 2020-05-10
  • 2021-08-15
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
相关资源
最近更新 更多