Я использую SQLAlchemy в качестве ORM для проекта python. Я создал модели / схему, и она работает нормально.
Теперь я пытаюсь работать с существующей базой данных pg SQL. Я загружаю таблицы и связанные классы с помощью функции automap_base
. Мне удается получить структуру таблиц и данные, хранящиеся внутри, но я не могу понять, обнаружены ли внешние ключи.
Если я беру свой пример, у меня есть товары, которые необходимо доставить, склады, откуда они находятся хранится, магазины, куда он должен быть доставлен, и грузовики для его доставки. У меня есть справочные таблицы для каждого из этих объектов с различной информацией, типом, количеством, размером и т. Д. c ...
У меня также есть таблица с прошлыми поставками [id
, origin
, destination
, quantity
, truck
, good_type
, et c ...]
В базе данных Pg SQL я создал эти столбцы с внешними ключами, связанными с его таблицами ссылок, для пример здесь origin
ссылка на таблицу ref_warehouse
, truck
на таблицу ref_truck
и т. д. c ...
# Creating engine
engine = create_engine('postgresql://'+DB_USER+':'+DB_PW+'@'+DB_HOST+':'+DB_PT+DB_NAME,echo=False)
my_metadata = MetaData()
# produce a set of mappings from my_metadata
Base = automap_base(metadata=my_metadata)
# set up mapped classes and relationships
Base.prepare()
# mapped classes from database
class_etp, class_sto, class_flux, = Base.classes.ref_truck, Base.classes.ref_store, Base.classes.flux
# access the first truck going to 'XXX'
# (here 'destination_truck' and 'type_truck' are columns of the flux table)
table_flux.filter_by(destination_truck = 'XXX').first().type_truck
>>> 'ZZZ'
Мне удается получить доступ к строке, которая дает тип первый перечисленный грузовик, но я хотел бы знать, как получить доступ к строке объекта таблицы ref_truck
, которая связана с table_flux
с помощью внешнего ключа в столбце type_truck
.
Я прочитал это SQLAlchemy ORM загружает отношения внешних ключей, но я не могу понять это, просматривая документы (какими бы полными и понятными они ни были). Мои таблицы имеют первичный ключ в связанных столбцах, поэтому с этой стороны все в порядке. Я думаю, что он загружен, но я просто не знаю, как получить к нему доступ.
Спасибо