2014-05-20 15 views
10

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.

risposta

Problemi correlati