Я не совсем понимаю, что происходит, но для нашего тестирования мы переименовываем таблицы перед тем, как все сгенерировать (т.е. схема.имя_таблицы переименовывается в имя_таблицы_схема из-за проблем с тем, как нам приходится тестировать). У меня есть файл сгенерированных запросов, которые можно использовать как константы, и какое-то время все работало нормально и так, как ожидалось. Я не знаю, что произошло и почему, но по состоянию на понедельник мои тесты выдают ошибку, сообщая, что таблица не существует. Он помечает таблицу как старое имя, а не новое имя, но другая таблица в этом операторе выбора использует новое имя, поэтому я не понимаю, почему одно правильное, а другое нет.
Когда я запускаю тесты, я импортирую запросы, чтобы новые имена таблиц были там после того, как наша тестовая база данных обновит все:
def setUp(self):
self.now = TestConstants.TEST_TIME_WINDOW_CENTER
self.database = TestDatabase()
importlib.reload(queries)
Затем мой тест запускает этот оператор:
get_qc_sod_data = (
select(QcSodTable)
.join(
LocalTimeTable,
and_(
QcSodTable.platformid == LocalTimeTable.platformid,
QcSodTable.networktype == LocalTimeTable.networktype
),
isouter=True,
)
.where(
or_(QcSodTable.qc_flag.not_in(("P", "F")), QcSodTable.qc_flag == None),
(QcSodTable.datetime + cast(literal(1.5) + ' DAYS', Interval)) - (cast(func.coalesce(LocalTimeTable.time_conv, 0) / 24 + ' HOURS', Interval)) < func.now(),
)
)
Ошибка возникает в LocalTimeTable, где указано, что таблица не существует, но указано неверное имя (schema.table_name), хотя в таблице Select указано правильное имя, как и ожидалось, поэтому я не уверен, почему другое неверно. Если я изменю LocalTimeTable на LocalTimeTable.__ table__, все пройдет нормально.
Есть ли что-то, что мне здесь не хватает? Нужно ли мне также перезагрузить эту таблицу в моем файле запросов констант?
РЕДАКТИРОВАТЬ:
Версия SQLAlchemy — 2.0.43
Вот таблица местного времени:
class LocalTimeTableBase(Base):
__abstract__ = True
PLATFORMID_COLUMN_NAME = "platformid"
NETWORKTYPE_COLUMN_NAME = "networktype"
TIME_CONV_COLUMN_NAME = "time_conv"
DISTRIBUTIONCODE_COLUMN_NAME = "distributioncode"
SECURITYID_COLUMN_NAME = "securityid"
platformid = Column(String, name=PLATFORMID_COLUMN_NAME, primary_key=True)
networktype = Column(
String, name=NETWORKTYPE_COLUMN_NAME, nullable=False, primary_key=True
)
time_conv = Column(Numeric, name=TIME_CONV_COLUMN_NAME)
distributioncode = Column(String, name=DISTRIBUTIONCODE_COLUMN_NAME)
securityid = Column(Integer, name=SECURITYID_COLUMN_NAME)
class LocalTimeTable(LocalTimeTableBase):
__tablename__ = "local_time"
__table_args__ = {"schema": SCHEMA_NAME}
Подробнее здесь: https://stackoverflow.com/questions/798 ... -statement
SqlAlchemy не использует обновленное имя таблицы в инструкции соединения ⇐ Python
Программы на Python
1763486877
Anonymous
Я не совсем понимаю, что происходит, но для нашего тестирования мы переименовываем таблицы перед тем, как все сгенерировать (т.е. схема.имя_таблицы переименовывается в имя_таблицы_схема из-за проблем с тем, как нам приходится тестировать). У меня есть файл сгенерированных запросов, которые можно использовать как константы, и какое-то время все работало нормально и так, как ожидалось. Я не знаю, что произошло и почему, но по состоянию на понедельник мои тесты выдают ошибку, сообщая, что таблица не существует. Он помечает таблицу как старое имя, а не новое имя, но другая таблица в этом операторе выбора использует новое имя, поэтому я не понимаю, почему одно правильное, а другое нет.
Когда я запускаю тесты, я импортирую запросы, чтобы новые имена таблиц были там после того, как наша тестовая база данных обновит все:
def setUp(self):
self.now = TestConstants.TEST_TIME_WINDOW_CENTER
self.database = TestDatabase()
importlib.reload(queries)
Затем мой тест запускает этот оператор:
get_qc_sod_data = (
select(QcSodTable)
.join(
LocalTimeTable,
and_(
QcSodTable.platformid == LocalTimeTable.platformid,
QcSodTable.networktype == LocalTimeTable.networktype
),
isouter=True,
)
.where(
or_(QcSodTable.qc_flag.not_in(("P", "F")), QcSodTable.qc_flag == None),
(QcSodTable.datetime + cast(literal(1.5) + ' DAYS', Interval)) - (cast(func.coalesce(LocalTimeTable.time_conv, 0) / 24 + ' HOURS', Interval)) < func.now(),
)
)
Ошибка возникает в LocalTimeTable, где указано, что таблица не существует, но указано неверное имя (schema.table_name), хотя в таблице Select указано правильное имя, как и ожидалось, поэтому я не уверен, почему другое неверно. Если я изменю LocalTimeTable на LocalTimeTable.__ table__, все пройдет нормально.
Есть ли что-то, что мне здесь не хватает? Нужно ли мне также перезагрузить эту таблицу в моем файле запросов констант?
РЕДАКТИРОВАТЬ:
Версия SQLAlchemy — 2.0.43
Вот таблица местного времени:
class LocalTimeTableBase(Base):
__abstract__ = True
PLATFORMID_COLUMN_NAME = "platformid"
NETWORKTYPE_COLUMN_NAME = "networktype"
TIME_CONV_COLUMN_NAME = "time_conv"
DISTRIBUTIONCODE_COLUMN_NAME = "distributioncode"
SECURITYID_COLUMN_NAME = "securityid"
platformid = Column(String, name=PLATFORMID_COLUMN_NAME, primary_key=True)
networktype = Column(
String, name=NETWORKTYPE_COLUMN_NAME, nullable=False, primary_key=True
)
time_conv = Column(Numeric, name=TIME_CONV_COLUMN_NAME)
distributioncode = Column(String, name=DISTRIBUTIONCODE_COLUMN_NAME)
securityid = Column(Integer, name=SECURITYID_COLUMN_NAME)
class LocalTimeTable(LocalTimeTableBase):
__tablename__ = "local_time"
__table_args__ = {"schema": SCHEMA_NAME}
Подробнее здесь: [url]https://stackoverflow.com/questions/79819270/sqlalchemy-not-using-updated-table-name-in-join-statement[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия