Helpex - Trao đổi & giúp đỡ Đăng nhập

Làm cách nào để nhập mô hình riêng vào myproject / alembic / env.py?

Vũ Thái Dương
· 07:44 16/08/2015
10 giờ trước

Tôi muốn sử dụng alembic revision --autogeneratevới các lớp mô hình của riêng mình. Do đó, tôi cần nhập chúng vào myproject/alembic/env.pynhư được mô tả trong tài liệu . Nhưng điều này không hiệu quả ngay cả khi tôi đã thử rất nhiều biến thể.

Tôi không chắc trong ngữ cảnh nào (không biết đây có phải là từ chính xác không) alembic chạy env.py. Có thể điều đó gây ra một số lỗi.

Đây là thư mục và cấu trúc tệp mà tôi sử dụng.

myproject/
    common/
        __init__.py
        model.py
    alembic/
        env.py

Lỗi là như vậy

    from .common import model
SystemError: Parent module '' not loaded, cannot perform relative import

myprojectbản thân nó chỉ là một kho lưu trữ / thư mục làm việc. Nó không phải là cài đặt vào hệ thống (với pip3, apt-get, easyinstallhoặc bất cứ điều gì khác).

33 hữu ích 0 bình luận 7.2k xem chia sẻ
Trần Lan Trúc
· 05:22 26/08/2015
05:22:42 26/08/2015

Loay hoay trong vài giờ với cùng một vấn đề này, tôi đã tìm ra giải pháp. Đầu tiên, đây là cấu trúc của tôi ngay bây giờ:

. ← That's the root directory of my project
├── alembic.ini
├── dev-requirements.txt
├── requirements.txt
├── runtime.txt
├── setup.cfg
├── src
│   └── models
│       ├── base.py
│       ...
│       └── migrations
│           ├── env.py
│           ├── README
│           ├── script.py.mako
│           └── versions
│          
└── tests

trong env.pytôi chỉ đơn giản làm điều này:

import sys
from os.path import abspath, dirname
sys.path.insert(0, dirname(dirname(dirname(abspath(__file__))))) # Insert <.>/src
import models # now it can be imported
target_metadata = models.base.Base.metadata

Hy vọng bạn thấy điều này hữu ích! :)

CHỈNH SỬA: Sau đó, tôi đã thực hiện bản sửa đổi đầu tiên của mình với cơ sở dữ liệu trống (chưa có bảng nào), alembic tự động lấp đầy mọi thứ cho upgrade()downgrade(). Tôi đã làm điều đó theo cách này vì không phải tất cả các bảng của tôi đều được alembic phát hiện một cách tự động .

20 hữu ích 1 bình luận chia sẻ
Nguyễn Quốc Kiên
· 19:33 22/05/2016
19:33:20 22/05/2016

Bạn có thể đặt biến môi trường PYTHONPATH để kiểm soát những gì python coi là thư mục cấp cao nhất, ví dụ: nếu bạn đang ở trong thư mục gốc của dự án của mình:

PYTHONPATH=. alembic revision -m "..."

Sau đó, bạn có thể sử dụng nhập "bình thường" trong env.py alembic của mình, liên quan đến thư mục gốc của bạn, trong ví dụ của bạn:

from src.models.base import Base
29 hữu ích 3 bình luận chia sẻ
Đặng Diệp Anh
· 10:24 16/11/2018
10:24:24 16/11/2018

Đặt cái này vào env.py của bạn để đưa thư mục làm việc vào đường dẫn Python:

import sys
import os

sys.path.insert(0, os.getcwd())
16 hữu ích 1 bình luận chia sẻ
Phạm Tú Quyên
· 15:37 20/03/2021
15:37:29 20/03/2021

Đối với alembic 1.5.5 trở lên, hãy thêm thông tin sau vào alembic.ini:

prepend_sys_path = .

Từ tài liệu alembic : điều này sẽ được thêm vào sys.path nếu có, mặc định là thư mục làm việc hiện tại.

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ python-3.x python-import alembic , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm