-
Notifications
You must be signed in to change notification settings - Fork 0
/
Python_orm.py
44 lines (34 loc) · 1.25 KB
/
Python_orm.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import sqlalchemy
from sqlalchemy.orm import sessionmaker
from models import create_tables, Publisher, Book, Stock, Shop, Sale
import json
DSN = 'postgresql://postgres:postgres@localhost:5432/orm_bd'
engine = sqlalchemy.create_engine(DSN)
create_tables(engine)
Session = sessionmaker(bind=engine)
session = Session()
with open('test_data.json', 'r') as fd:
data = json.load(fd)
for record in data:
model = {
'publisher': Publisher,
'shop': Shop,
'book': Book,
'stock': Stock,
'sale': Sale,
}[record.get('model')]
session.add(model(id=record.get('pk'), **record.get('fields')))
session.commit()
def get_shops():
meaning = input("Введите id или имя издателя: ")
query = (session.query(Book.title, Shop.name, Sale.price, Sale.date_sale)
.join(Publisher).join(Stock).join(Sale).join(Shop))
if meaning.isdigit():
con = query.filter(meaning == Publisher.id).all()
else:
con = query.filter(meaning == Publisher.name).all()
for book, shop, price, date in con:
print(f"{book: <40} | {shop: <10} | {price: <8} | {date.strftime('%d-%m-%Y')}")
if __name__ == '__main__':
get_shops()
session.close()