Я пытаюсь создать функцию для записи слова Python в виде строки в таблицу Postgres через язык выражений SQLAlchemy. Я хочу проверить, что значения, переданные в этом словаре, соответствуют типам столбцов таблицы базы данных.
Пока у меня есть что-то вроде
import sqlalchemy
from sqlalchemy import MetaData
def create(table, new_row):
engine = sqlalchemy.create_engine(~my db address~)
config_metadata = MetaData()
config_metadata.reflect(engine)
target_table = config_metadata.tables[table]
target_column_types = {col.name:col.type.python_type for col in target_table.c}
# ... Code to check that target_column_types match types of new_row
Согласно документам python_type
дает соответствующие типы, которые, как ожидается, будут возвращены, например, int
для Integer и dict
для JSONB. Однако, если я вызову его в столбце INT4RANGE Postgres, я получу NotImplementedError()
. Эмпирически, я могу использовать SQLAlchemy для запроса этого же столбца диапазона и получить результат обратно, который имеет тип psycopg2._range.NumericRange
Почему .python_type
вызов этого столбца просто не дает мне psycopg2._range.NumericRange
, тогда ? И могу ли я что-нибудь сделать для получения заданного типа ожидаемого возврата в случаях, когда python_type
не реализован?