SQLAlchemy ORM automap () - доступ к отношениям из ForeignKeys для загруженных таблиц - PullRequest
0 голосов
/ 16 февраля 2020

Я использую 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 загружает отношения внешних ключей, но я не могу понять это, просматривая документы (какими бы полными и понятными они ни были). Мои таблицы имеют первичный ключ в связанных столбцах, поэтому с этой стороны все в порядке. Я думаю, что он загружен, но я просто не знаю, как получить к нему доступ.

Спасибо

...