рдЯрдЯреНрдЯреВ ORM рдХреЗ рд╕рд╛рде рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡

рд╣реЗрд▓реЛ, рд╣реЗрдмреНрд░!


рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рднреЛрдЬрди рдореЗрдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд░реЗрд╕реНрддрд░рд╛рдВ рдмрд┐рд▓ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдкрд╛рдпрдерди рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рдо рдорд┐рд▓рд╛ред рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рдСрд░реНрдбрд░ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DB рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ORM рдЪреБрдирдиреЗ рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдлреНрд▓рд╛рд╕реНрдХ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП Django ORM рддреБрд░рдВрдд рдмрд╣ рдЧрдпрд╛ рдерд╛ рдФрд░ рдкрд╕рдВрдж рд╢реБрд░реВ рдореЗрдВ SQLAlmhemy рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЧрд┐рд░ рдЧрдИ рдереАред рдПрдХ рдУрд░, рдпрд╣ рдУрдЖрд░рдПрдо рд▓рдЧрднрдЧ рд╕рд░реНрд╡рд╢рдХреНрддрд┐рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдорд╛рд╕реНрдЯрд░ рдХрд░рдирд╛ рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдХреАрдорд┐рдпрд╛ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рд╡рд┐рдХрд╛рд╕ рддреЗрдЬреА рд╕реЗ рд╣реЛред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреЛрдиреА рдУрдЖрд░рдПрдо рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ред
рдЫрд╡рд┐


рдЗрд╕рдиреЗ рддреБрд░рдВрдд рдореБрдЭ рдкрд░ рдкреНрд░рд╣рд╛рд░ рдХрд┐рдпрд╛ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреАрдорд┐рдпрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдмреЛрдЭрд┐рд▓ рд╣реИред рд╕рд╛рде рд╣реА, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрдо рд╕рдордп рдФрд░ рдХреЛрдб рдХреА рд▓рд╛рдЗрдиреЗрдВ рд▓рдЧрддреА рд╣реИрдВред


рдореИрдВрдиреЗ рдкреЛрдиреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕рдореАрдХреНрд╖рд╛ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред


рдЯрдЯреНрдЯреВ рд▓рд╛рдн:


  • рдХреНрд╡реЗрд░реА рд▓реЗрдЦрди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЬрдирд░реЗрдЯрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рд▓реИрдореНрдмреНрдбрд╛ рдлрд╝рдВрдХреНрд╢рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
  • рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреИрд╢рд┐рдВрдЧ
  • рдкреВрд░реНрдг рд╕рдордЧреНрд░ рдХреБрдВрдЬреА рд╕рдорд░реНрдерди

рдореБрдЦреНрдп рджреЛрд╖ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рддрдВрддреНрд░ рдХреА рдХрдореА рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░реВрдВрдЧрд╛ (рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЕрдм рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ)


, , Pony , , .


Pony , .



pip Pony:


pip install pony

DB API :


  • PostgreSQL: psycopg psycopg2cffi
  • Oracle: cx_Oracle
  • MySQL: PyMySQL

Pony:


from pony.orm import *


тАФ . .


db = Database()

. Database db.bind() . . SQLite ( ) PostgreSQL (). , Database. :


settings = dict(
    sqlite=dict(provider='sqlite', filename='pony.db', create_db=True),
    postgres=dict(provider='postgres', user='pony', password='pony', host='localhost', 
        database='pony')
)

:


db = Database(**settings['postgres'])


ER . , Python . , .


рдЫрд╡рд┐


:


from datetime import datetime
from pony.orm import *

db = Database()

class User(db.Entity):
    id = PrimaryKey(int, auto=True)
    fullname = Optional(str)
    password = Optional(str)
    nickname = Optional(str)
    lended = Set('Credit', reverse='lender')
    borrowed = Set('Credit', reverse='borrower')
    credit_editions = Set('CreditEdition', reverse='user')
    sessions = Set('UserInSession')
    affected_editions = Set('CreditEdition', reverse='affected_user')

class Session(db.Entity):
    id = PrimaryKey(int, auto=True)
    title = Optional(str)
    start = Optional(datetime)
    end = Optional(datetime)
    ordereders = Set('OrderedItem')
    users = Set('UserInSession')

class OrderedItem(db.Entity):
    id = PrimaryKey(int, auto=True)
    session = Required(Session)
    title = Optional(str)
    price = Optional(int)
    user_in_sessions = Set('UserInSession')

class Credit(db.Entity):
    id = PrimaryKey(int, auto=True)
    lender = Required(User, reverse='lended')
    borrower = Required(User, reverse='borrowed')
    value = Optional(int)
    credit_editions = Set('CreditEdition')

class UserInSession(db.Entity):
    id = PrimaryKey(int, auto=True)
    user = Required(User)
    session = Required(Session)
    orders = Set(OrderedItem)
    value = Optional(int)

class CreditEdition(db.Entity):
    id = PrimaryKey(int, auto=True)
    user = Required(User, reverse='credit_editions')
    affected_user = Required(User, reverse='affected_editions')
    credit = Required(Credit)
    old_value = Optional(int)
    new_value = Optional(int)

db.generate_mapping()

, , .



( ). :


session = Session[sid]

Session , id == sid.


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛ рдерд╛, рдкреЛрдиреА рдореЗрдВ рдХреНрд╡реЗрд░реА рдЬрдирд░реЗрдЯрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХреАрдорд┐рдпрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓реЗрдЦрди рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддреА рд╣реИред
рдиреАрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЙрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рддреНрд░ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрднрд╛рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реИрдВред


users = select(u for u in User if u not in session.users.user and not u.virtual)

рдирд┐рд╖реНрдХрд░реНрд╖


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рднреА рдкреЛрдиреА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдиреАрдЪреЗ рдореИрдВ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рд╕рдореБрджрд╛рдп рдХреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдирд▓ рдХреЗ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред


рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рдж!


рдкреЛрдиреА рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХрдореНрдпреБрдирд┐рдЯреА рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди

Source: https://habr.com/ru/post/undefined/


All Articles