Невозможно создать таблицы в sqlalchemy postgresql

0

Я пытаюсь создать несколько таблиц в базе данных sqlalchemy с помощью Python. Таблицы не создаются в базе данных, и я ничего не могу найти в информации о регистрации.

Model.py

from sqlalchemy.ext.declarative import declarative_base
Model = declarative_base()

Department.py [У меня есть больше моделей, и все они импортируют Model.py, но я не вижу ни одной из этих таблиц в моей базе данных]

from sqlalchemy import Column, Integer, String
from models.Model import Model

class Department(Model):
    __tablename__ = "department"
    oid = Column('oid', Integer, primary_key=True)
    name = Column('name', String, unique=True)

data_service_provider.py Этот класс создает движок. Я вызываю этот класс из приведенного ниже сценария.

from models.InitDB импортировать init_database из sqlalchemy import create_engine из sqlalchemy.orm импортировать сеансовый мастер из моделей. Импорт импорта импорта модели импорта

class DataProviderService():
    def __init__(self, engine):
        logging.basicConfig()
        logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG)
        if not engine:
            raise ValueError('The values specified in engine is not supported')
        self.engine = engine
        db_engine = create_engine(engine, echo=True)
        Model.metadata.create_all(db_engine)

middleware.py

from sqlalchemy.engine.url import URL
from config import settings
from data_provider_service import DataProviderService

db_engine = URL(**settings.DATABASE);

DATA_PROVIDER = DataProviderService(db_engine)

Settings.py

DATABASE = {
    'drivername': 'postgresql',
    'host': 'localhost',
    'port': '5432',
    'username': 'postgres',
    'password': 'punitjain',
    'database': 'csuf'
}

Таким образом, в основном Model.py является базовым классом, который импортируется всеми моими классами моделей. В data_service_provider.py я создаю механизм базы данных и создаю таблицы. Скрипты middleware.py делают URL-адрес базы данных из Settings.py и вызывают DataProviderService.

Я пытаюсь в течение последних нескольких часов, но таблицы не создаются. Я не могу найти полезную информацию в журналах отладки.

Ниже приведены журналы отладки:

postgresql://postgres:password@localhost:5432/csuf
2018-02-13 04:17:55,496 INFO sqlalchemy.engine.base.Engine select version()
2018-02-13 04:17:55,496 INFO sqlalchemy.engine.base.Engine {}
2018-02-13 04:17:55,497 INFO sqlalchemy.engine.base.Engine select 
current_schema()
2018-02-13 04:17:55,497 INFO sqlalchemy.engine.base.Engine {}
2018-02-13 04:17:55,498 INFO sqlalchemy.engine.base.Engine SELECT CAST('test 
plain returns' AS VARCHAR(60)) AS anon_1
2018-02-13 04:17:55,499 INFO sqlalchemy.engine.base.Engine {}
INFO:sqlalchemy.engine.base.Engine:select version()
2018-02-13 04:17:55,499 INFO sqlalchemy.engine.base.Engine SELECT CAST('test 
unicode returns' AS VARCHAR(60)) AS anon_1
INFO:sqlalchemy.engine.base.Engine:{}
INFO:sqlalchemy.engine.base.Engine:select current_schema()
INFO:sqlalchemy.engine.base.Engine:{}
INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test plain returns' AS 
VARCHAR(60)) AS anon_1
INFO:sqlalchemy.engine.base.Engine:{}
INFO:sqlalchemy.engine.base.Engine:SELECT CAST('test unicode returns' AS 
VARCHAR(60)) AS anon_1
2018-02-13 04:17:55,500 INFO sqlalchemy.engine.base.Engine {}
INFO:sqlalchemy.engine.base.Engine:{}
2018-02-13 04:17:55,500 INFO sqlalchemy.engine.base.Engine show 
standard_conforming_strings
INFO:sqlalchemy.engine.base.Engine:show standard_conforming_strings
2018-02-13 04:17:55,500 INFO sqlalchemy.engine.base.Engine {}
INFO:sqlalchemy.engine.base.Engine:{}
Теги:
orm
sqlalchemy

1 ответ

0
Лучший ответ

Я переместил все мои модели в другой пакет, но пропустил, чтобы добавить init.py, что вызывало проблемы. Добавление init.py и указание имен моделей в том, что это разрешило. Спасибо!

init.py

__all__ = ["College", "Course", "Department", "Program", "init_database"]

from models.College import College
from models.Course import Course
from models.Department import Department
from models.Program import Program

Ещё вопросы

Сообщество Overcoder
Наверх
Меню