Sto usando SQL Alchemy v (0.9.1) che ha la funzionalità di automap. Questo mi consente di creare automaticamente classi e relazioni. http://docs.sqlalchemy.org/en/rel_0_9/orm/extensions/automap.htmlSQLAlchemy Automap non crea una classe per le tabelle senza chiave primaria
Il problema che sto riscontrando è che quando si utilizza automap_base, vedo che non tutte le tabelle che sono disponibili nell'elenco metadata.tables sono mappate.
Non ci sono errori durante la preparazione, se non che sono in grado di accedere alla classe (ad es Base.classes.Example_Table) dalla Base dopo aver chiamato automap_base()
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)
Poi corro a scoprire che le classi non esistono per tutte le tabelle di metadati (non ho usato solo = argomento [] nei metadati)
for mappedclass in Base.classes:
print mappedclass
for mdtable in metadata.tables:
print mdtable
solo per scoprire che Example_Table (con la seguente sintassi di creare) non ha una classe
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
cioè Base.class.Example_Table restituisce il seguente errore
---------------------------------------------------------------------------
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
Io non credo che questo problema si verifica perché il mio nome Example_Table ha una sottolineatura in esso.
Penso che il problema sia legato al fatto che la mia tabella Example_ non ha una chiave primaria. La tabella Example_e intende solo collegare altre due tabelle.