2012-06-30 10 views
10

Ich habe Alembic 0.3.4, sqlalchemy, SQLite Version 3.7.4 installiert und SQLAlchemy 0.6.4 auf SQLAlchemy 0.7 oder höher von meinem ubuntu aktualisiert. folgte ich die Anweisung: http://alembic.readthedocs.org/en/latest/tutorial.htmlAnforderung eines einfachen Alembic-Arbeitsbeispiels für automatische Generierung von Migrationen

Jetzt bin ich testen: Auto generieren Migrationen Ich habe ein Paket erstellt: schema, und ein Paket Marker unter Schema: init Py mit einer Zeile definiert:

__all__ = ["teacher"] 

ich habe auch eine Moduldatei: dbmodel.py in Schemata Verzeichnis mit folgendem Inhalt

Base = declarative_base() 
class teacher(Base): 
     __tablename__ = 'teacher' 
     id = Column(Integer, primary_key=True) 
     name = Column(String) 
     department = Column(String) 

Durch die wa y, Ich habe eine SQLite db erstellt, und es läuft gut für einige Tests vor der automatischen Generierung von Migrationen. Ich habe die Datei env.py konfiguriert. Es gibt zwei Zeilen hinzugefügt:

from schemas.dbmodel import Base 
target_metadata = Base.metadata 

Dann laufe ich:

alembic revision --autogenerate -m "Added teacher table" 

aber immer noch Fehler:

Traceback (most recent call last): 
File "/usr/local/bin/alembic", line 9, in <module> 
    load_entry_point('alembic==0.3.4', 'console_scripts', 'alembic')() 
    File "/usr/local/lib/python2.7/dist-packages/alembic-0.3.4-py2.7.egg/alembic/config.py", line 229, in main 
    **dict((k, getattr(options, k)) for k in kwarg) 
    File "/usr/local/lib/python2.7/dist-packages/alembic-0.3.4-py2.7.egg/alembic/command.py", line 93, in revision 
    script.run_env() 
    File "/usr/local/lib/python2.7/dist-packages/alembic-0.3.4-py2.7.egg/alembic/script.py", line 188, in run_env 
    util.load_python_file(self.dir, 'env.py') 
    File "/usr/local/lib/python2.7/dist-packages/alembic-0.3.4-py2.7.egg/alembic/util.py", line 185, in load_python_file 
    module = imp.load_source(module_id, path, open(path, 'rb')) 
    File "alembic/env.py", line 20, in <module> 
    from schemas.dbmodel import Base 
ImportError: No module named schemas.dbmodel 

Ich weiß nicht, warum es so schwierig ist für mich zu testen ein einfaches Beispiel mit Alambic. Ich möchte nur mein Anwendungsdatenmodell in das physische Datenbankmodell importieren. Ist das so kompliziert? Vielen Dank. Bitte jemanden, der Alambic kennt, gibt uns ein einfaches Beispiel Schritt für Schritt. Ich schätze, mehr Menschen werden davon profitieren.

+0

Also wo in Ihrem Code ist die URL zur SQLite-Datenbank? Ich habe dies aus einer bestehenden Pyramiden-Anwendung, die sqlalchemy-Migrationen verwendet. Um dies zum Laufen zu bringen, musste ich die URL/Db-Verbindung als Pyramide starten und dann mein Modell Base von dort laden. https://github.com/mitechie/Bookie/blob/develop/dbversions/env.py#L12 – Rick

+0

In-Datei: alembic.ini, konfiguriert ich es und fügte hinzu, eine Zeile: sqlalchemy.url = sqlite: /// Test Dieser arbeitete für die Migration der Schemaänderung in meine Test-DB. – user1342336

Antwort

20

Ich fand auch, dass Alembic mein Modell Module nicht finden konnte. Zur Umgehung des Problems fand ich, dass, indem Sie den folgenden meiner env.py hinzufügen, bevor meine Modelle zu importieren, könnte ich es zwingen, zu arbeiten:

import os, sys 
sys.path.append(os.getcwd()) 

Dies ist wahrscheinlich nicht die beste Lösung, aber es hat Alembic meine Migrationen automatisch generieren .

+0

Danke. Sie haben Recht, obwohl mein Code immer noch ein Problem hat, funktioniert zumindest der Datenmodulpfad jetzt gut. Sie sparen mir viel Zeit :) – user1342336

+1

Ich habe kürzlich herausgefunden, dass wir die PYTHONMATH-Variable konfigurieren müssen, indem Sie den aktuellen Modulpfad hinzufügen. Es klappt. – user1342336

+0

Ich war mit einem ähnlichen Problem konfrontiert und jetzt funktioniert es .. Hier ist die Frage und die Antwort, die mein Problem gelöst http://stackoverflow.com/questions/15038036/integrating-alembic-with-sqlalchemy –

Verwandte Themen