我正在使用具有自动功能的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仅用于链接另外两个表。
答案 0 :(得分:24)
通过梳理参考/重构问题来计算出来。
如果它可以帮助别人 -
由于SQLAlchemy ORM基于身份映射模型,因此无法映射(或自动化)没有主键的表。应指定任意主键。