2012-06-30 21 views
10

Tôi đã cài đặt alembic 0.3.4, sqlalchemy, SQLite phiên bản 3.7.4 và nâng cấp SQLAlchemy 0.6.4 lên SQLAlchemy 0.7 hoặc cao hơn từ ubuntu của tôi. Tôi làm theo các hướng dẫn: http://alembic.readthedocs.org/en/latest/tutorial.htmlYêu cầu một ví dụ làm việc đơn giản cho Auto Migating Migrations

Bây giờ tôi đang thử nghiệm: Auto Tạo Migrations Tôi đã tạo ra một gói phần mềm: schemas, và một điểm đánh dấu gói dưới schemas: init py với một dòng định nghĩa:

__all__ = ["teacher"] 

tôi cũng đã tạo ra một tập tin mô-đun: dbmodel.py trong schemas thư mục với nội dung dưới đây

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

Đến wa y, tôi có một sqlite db được tạo ra, và nó chạy tốt để làm một số kiểm tra trước khi Auto Generating Migrations. Tôi đã cấu hình tệp env.py. Có hai dòng thêm:

from schemas.dbmodel import Base 
target_metadata = Base.metadata 

Sau đó, tôi chạy:

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

nhưng vẫn nhận được lỗi:

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 

Tôi không biết tại sao nó là rất khó khăn cho tôi để kiểm tra một ví dụ đơn giản sử dụng alembic. Tôi chỉ muốn nhập mô hình dữ liệu ứng dụng của mình vào mô hình cơ sở dữ liệu vật lý. Điều đó có phức tạp không? Cảm ơn. Xin vui lòng ai đó biết alembic cho chúng ta một bước exaple đơn giản bước. Tôi đoán nhiều người sẽ được hưởng lợi từ điều đó.

+0

Vì vậy, trong mã của bạn là url vào cơ sở dữ liệu sqlite ở đâu? Tôi đã nhận được điều này để làm việc từ một ứng dụng kim tự tháp hiện có đang sử dụng sqlalchemy-migrations. Để có được điều này để làm việc tôi đã phải bootstrap kết nối url/db như kim tự tháp hiện và sau đó để tải lên mô hình cơ sở của tôi từ đó. https://github.com/mitechie/Bookie/blob/develop/dbversions/env.py#L12 – Rick

+0

Trong tệp: alembic.ini, tôi đã định cấu hình nó và thêm một dòng: sqlalchemy.url = sqlite: /// test This đã làm việc để di chuyển thay đổi giản đồ sang DB thử nghiệm của tôi. – user1342336

Trả lời

20

Tôi cũng thấy rằng Alembic không thể tìm thấy mô-đun mô hình của mình. Là một workaround, tôi thấy rằng, bằng cách thêm dòng sau vào env.py tôi trước khi nhập mô hình của tôi, tôi có thể buộc nó để làm việc:

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

Đây có lẽ không phải là giải pháp tốt nhất, nhưng nó có nồi cất rượu để autogenerate di cư của tôi .

+0

Cảm ơn. Bạn là đúng, mặc dù mã của tôi vẫn còn có một số vấn đề, ít nhất là con đường mô-đun dữ liệu hoạt động tốt ngay bây giờ. Bạn tiết kiệm cho tôi rất nhiều thời gian :) – user1342336

+1

Gần đây tôi đã phát hiện ra rằng chúng ta cần cấu hình biến PYTHONMATH bằng cách thêm đường dẫn mô-đun hiện tại. Nó hoạt động. – user1342336

+0

Tôi đã phải đối mặt với một vấn đề tương tự và bây giờ nó hoạt động .. Đây là câu hỏi và câu trả lời đã giải quyết vấn đề của tôi http://stackoverflow.com/questions/15038036/integrating-alembic-with-sqlalchemy –

Các vấn đề liên quan