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

标签 python sqlalchemy

我正在使用具有自动映射功能的 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)

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

for mappedclass in Base.classes:
    print mappedclass

for mdtable in metadata.tables:
    print mdtable

才发现Example_Table(用下面的create语法)没有类

    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

关于python - SQLAlchemy Automap 不会为没有主键的表创建类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23765681/

相关文章:

python - 具有不同形状元素的 numpy.array

python-3.x - 有人可以解释一下这句话吗,最好是用初学者的语言?

python - SQLAlchemy:避免延迟加载的浅拷贝

postgresql - 在 SQLAlchemy 中加入集合返回函数 (SRF) 和访问列

python - Django请求GET参数值列表

python - 如何在 Tensorflow 中实现堆叠式 RNN?

python - 您如何将十进制数拆分为小数点以获得分钟和秒? Python

跨选择的 Python Pandas XlsxWriter 中心

python - SQLAlchemy 中的关系未按预期工作

python - 如何使用 Sqlalchemy 访问预先存在的表