У меня есть приложение, которое я использую, где все мои модели и мой сеанс хранятся в одном файле models.py:
import datetime
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String, DateTime, Float
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method
engine = create_engine('sqlite:///bidbot.db', echo=True)
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()
class AgentLog(Base):
__tablename__ = 'agentlog'
id = Column(Integer, primary_key=True)
created_at = Column(DateTime,default=datetime.datetime.utcnow)
ingroups = Column(String)
total_calls = Column(Integer)
calls_waiting = Column(Integer)
agents_logged_in = Column(Integer)
agents_in_calls = Column(Integer)
agents_waiting = Column(Integer)
agents_paused = Column(Integer)
agents_in_dispo = Column(Integer)
agents_in_dial = Column(Integer)
def create_new():
session.add(AgentLog())
session.commit()
Как видите, у меня есть собственный метод create_new, который используетсеанс для создания нового объекта.
Если я запускаю этот файл models.py самостоятельно:
python -i models.py
Затем я могу вызвать функцию AgentLog.create_new (), и она создастновая запись.
Однако я импортирую models.py в мой пакет более высокого уровня:
from models.py import *
И когда я запускаю ту же функцию на модели:
AgentLog.create_new()
Теперь я получаю сообщение об отсутствии такой таблицы, существует ошибка ... Это сбивает с толку, поскольку я считаю, что метод должен иметь доступ к точно такому же объекту сеанса.
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: agentlog