SQLAlchemy Automap不为没有主键的表创建类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQLAlchemy Automap不为没有主键的表创建类相关的知识,希望对你有一定的参考价值。

我正在使用具有自动功能的SQL Alchemy v(0.9.1)。这允许我自动创建类和关系。 http://docs.sqlalchemy.org/en/rel_0_9/orm/extensions/automap.html

我遇到的问题是,当使用automap_base时,我发现并非所有在metadata.tables列表中可用的表都被映射。

准备时没有错误,除了我在调用automap_base()后无法从Base访问类(例如Base.classes.Example_Table)

from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import create_session

from sqlalchemy.ext.automap import automap_base

engine = create_engine("mysql+mysqldb://")

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

session = create_session(bind = engine)

然后我跑去发现元数据中的所有表都不存在类(我没有在元数据中只使用= []参数)

for mappedclass in Base.classes:
    print mappedclass

for mdtable in metadata.tables:
    print mdtable

只发现Example_Table(具有以下创建语法)没有类

    CREATE TABLE `Example_Table` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `attributeType` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3290719 DEFAULT CHARSET=latin1

即Base.class.Example_Table返回以下错误

    ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-15-94492ae1b8ba> in <module>()
      7 type(metadata.tables)
      8 
----> 9 Base.classes.Example_Table

/usr/local/lib/python2.7/site-packages/sqlalchemy/util/_collections.pyc in __getattr__(self, key)
    172             return self._data[key]
    173         except KeyError:
--> 174             raise AttributeError(key)
    175 
    176     def __contains__(self, key):

AttributeError: Example_Table

我认为这个问题不会发生,因为我的Example_Table名称中有一个下划线。

我认为问题与我的Example_Table没有主键的事实有关。 Example_Table仅用于链接另外两个表。

答案

通过梳理参考/重构问题来弄清楚它。

万一它可以帮助别人 -

由于SQLAlchemy ORM基于身份映射模型,因此无法映射(或自动化)没有主键的表。应指定任意主键。

http://docs.sqlalchemy.org/en/latest/faq/ormconfiguration.html#how-do-i-map-a-table-that-has-no-primary-key

以上是关于SQLAlchemy Automap不为没有主键的表创建类的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQLAlchemy 创建一个不是主键的标识列?

来自唯一和主外键的 SQLAlchemy 主键

[Pythod][Sqlalchemy]Automap 实践

sqlalchemy 如何使用 automap_base 生成(多对多)关系

如何使用Sqlalchemy中的automap_base处理AttributeError(key)? [重复]

SQLAlchemy 不仅通过主键从身份映射中获取项目