2012-06-30 10 views
10

Zainstalowałem alembik 0.3.4, sqlalchemy, wersję SQLite 3.7.4 i zaktualizowałem SQLAlchemy 0.6.4 do SQLAlchemy 0.7 lub nowszego z mojego Ubuntu. I przestrzegać instrukcji: http://alembic.readthedocs.org/en/latest/tutorial.htmlPoproś o prosty przykład działania alembika dla automatycznego generowania migracji

Teraz jestem testowania: Auto Generowanie Migracje ja stworzyliśmy pakiet: schematów oraz znacznik pakietu pod schematów: startowy .py z jednej linii zdefiniowane:

__all__ = ["teacher"] 

ja również utworzony plik modułu: dbmodel.py w katalogu schematów z poniższej treści

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

przez WA y, mam utworzony sqlite db, i działa dobrze przed wykonaniem testu przed Auto Generating Migrations. Skonfigurowałem plik env.py. Istnieją dwie linie dodania:

from schemas.dbmodel import Base 
target_metadata = Base.metadata 

Potem uruchom:

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

ale wciąż błąd:

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 

Nie wiem, dlaczego to jest tak trudne dla mnie do testowania prosty przykład użycia alembika. Chcę tylko zaimportować mój model danych aplikacji do fizycznego modelu bazy danych. Czy to jest takie skomplikowane? Dzięki. Proszę kogoś, kto zna alembik, krok po kroku daje nam prosty przykład. Sądzę, że więcej osób skorzysta z tego.

+0

Więc gdzie w kodzie znajduje się adres URL do bazy danych sqlite? Zrobiłem to do pracy z istniejącej piramidy, która używała migracji sqlalchemy. Aby to zadziałało, musiałem uruchomić łącze url/db tak, jak robi to piramida, a następnie załadować mój model Base z tego miejsca. https://github.com/mitechie/Bookie/blob/develop/dbversions/env.py#L12 – Rick

+0

W pliku: alembic.ini skonfigurowałem go i dodałem jedną linię: sqlalchemy.url = sqlite: /// test To pracowałem nad przeniesieniem zmiany schematu do mojego testowego DB. – user1342336

Odpowiedz

20

Odkryłem również, że Alembic nie może znaleźć modułów mojego modelu. Jako obejście, znalazłem, że poprzez dodanie następujących do mojego env.py przed importem moich modeli, mogę zmusić go do pracy:

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

Prawdopodobnie nie jest to najlepsze rozwiązanie, ale dostał alembic do autogenerować moje migracje .

+0

Dzięki. Masz rację, chociaż mój kod nadal ma jakiś problem, przynajmniej ścieżka modułu danych działa teraz dobrze. Oszczędzasz mi dużo czasu :) – user1342336

+1

Niedawno dowiedziałem się, że musimy skonfigurować zmienną PYTHONMATH, dodając bieżącą ścieżkę modułu. To działa. – user1342336

+0

Miałem do czynienia z podobnym problemem i teraz działa. Oto pytanie i odpowiedź, która rozwiązała mój problem http://stackoverflow.com/questions/15038036/integrating-alembic-with-sqlalchemy –

Powiązane problemy