рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдЧрд╛-рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рднрд╛рдЧ 4: рдбреЗрдЯрд╛рдмреЗрд╕

рдпрд╣ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЪреМрдерд╛ рд▓реЗрдЦ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдлреНрд▓рд╛рд╕реНрдХ рдорд╛рдЗрдХреНрд░реЛрдлреНрд░рд╛рдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВред

рдЗрд╕ рдЧрд╛рдЗрдб рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдПрдХ рдХрд╛рдлреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧрд┐рдВрдЧ рдПрдкреНрд▓реАрдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдореМрд▓рд┐рдХрддрд╛ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧ рдХрд╣рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
рднрд╛рдЧ 1: рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!
рднрд╛рдЧ 2: рдЯреЗрдореНрдкрд▓реЗрдЯ
рднрд╛рдЧ 3: рдкреНрд░рдкрддреНрд░
рднрд╛рдЧ 4: рдбреЗрдЯрд╛рдмреЗрд╕
рднрд╛рдЧ 5: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди
рднрд╛рдЧ 6: рдкреНрд░реЛрдлрд╛рдЗрд▓ рдкреЗрдЬ рдФрд░ рдЕрд╡рддрд╛рд░
рднрд╛рдЧ 7: рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг
рднрд╛рдЧ 8: рдЕрдиреБрдпрд╛рдпреА, рд╕рдВрдкрд░реНрдХ рдФрд░ рдорд┐рддреНрд░
рднрд╛рдЧ 9: рдЕрдВрдХреБрд░рдг
рднрд╛рдЧ 10: рдкреВрд░реНрдг рдкрд╛рда рдЦреЛрдЬ
рднрд╛рдЧ 11: рдИрдореЗрд▓ рд╕рдорд░реНрдерди
рднрд╛рдЧ 12: рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг
рднрд╛рдЧ 13: рддрд┐рдерд┐ рдФрд░ рд╕рдордп
рднрд╛рдЧ 14: I18n рдФрд░ L10n
рднрд╛рдЧ 15: рдЕрдЬрд╛рдХреНрд╕
рднрд╛рдЧ 16: рдбрд┐рдмрдЧрд┐рдВрдЧ, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ
рднрд╛рдЧ 17: рд▓рд┐рдирдХреНрд╕ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рднреА рддреИрдирд╛рдд рд╣реИрдВ!)
рднрд╛рдЧ 18: рд╣рд░реЛрдХреВ рдХреНрд▓рд╛рдЙрдб рдкрд░ рддреИрдирд╛рддреА


рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐


рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд▓реЙрдЧрд┐рди рдлрд╝реЙрд░реНрдо рдкреВрд░реНрдг рдмрдирд╛рдпрд╛ред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд╣рд╛рдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХреЗрдВред

рдЗрд╕ рднрд╛рдЧ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХрд╛ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЫреЛрдбрд╝рд╛ рдерд╛ред рдХреГрдкрдпрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдФрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ


рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдХреБрдЫ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдПрдЧреАред рдЖрд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдПрдХ Linux рдпрд╛ OS X рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдЕрдзрд┐рдХрд╛рд░ рджрд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
chmod a+x script.py 


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╢рдмрдВрдЧ рд░реЗрдЦрд╛ рд╣реИ ред рдкрд╣рд▓реЗ рд╕реНрдерд╛рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ), рдЬреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреА рдЧрдИ рдирд┐рд╖реНрдкрд╛рджрди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдФрд░ рдПрдХ рд╢рдмрдВрдЧ рд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 ./script.py <> 


рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЛ рдЪрдпрдирд┐рдд рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
 flask\Scripts\python script.py <> 


рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкрде рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рд┐рд╕реНрдЯрдо PATH рдореЗрдВ рдЕрдкрдиреЗ рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЙрдЧ \ рдлреНрд▓рд╛рд╕реНрдХ \ рд▓рд┐рдкрд┐рдпреЛрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ [рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкрде] рдЖрдкрдХреЗ рдирд┐рдпрдорд┐рдд рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреЛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдм рд╕реЗ, рдпрд╣ рдЧрд╛рдЗрдб рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ / рдУрдПрд╕ рдПрдХреНрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рддреЛ рддрджрдиреБрд╕рд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдмрджрд▓рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред

рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕


рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Flask-SQLAlchemy рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди SQLAlchemy рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ ORM рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ-рд░рд┐рд▓реЗрд╢рдирд▓ рдореИрдкрд┐рдВрдЧ рд╣реИред

ORM рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЯреЗрдмрд▓ рдпрд╛ SQL рдХреЗ рдмрдЬрд╛рдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рдВрдЪрд╛рд▓рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ ORM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдорд╛рдВрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдлреНрд▓рд╛рд╕реНрдХ-рдПрд╕рдХреНрдпреВрдПрд▓рдЪреЗрдореА рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрд╕рдХреНрдпреВрдПрд▓ рдмреЛрд▓рдиреЗ рджреЗрдВред

рдкреНрд░рд╡рд╛рд╕


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

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рд╣рдо рдЕрдкрдиреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдкрдбреЗрдЯ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SQLAlchemy-migrate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдиреБрдЕрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрднреА рдЪрд┐рдВрддрд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрдо рд▓рд╛рдЧрдд рд╣реИред

рдкрд░реНрдпрд╛рдкреНрдд рд╕рд┐рджреНрдзрд╛рдВрдд, рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рд╕рдордп!

рд╡рд┐рдиреНрдпрд╛рд╕


рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╣рдо sqlite рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЖрдЗрдЯрдо рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ (config.py file) рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:
 import os basedir = os.path.abspath(os.path.dirname(__file__)) SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') 


SQLALCHEMY_DATABASE_URI Flask-SQLAlchemy рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП SQLALCHEMY_DATABASE_URI рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рд╣реИред

SQLALCHEMY_MIGRATE_REPO рд╡рд╣ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо SQLAlchemy-migrate. рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ SQLAlchemy-migrate.

рдЕрдВрдд рдореЗрдВ, рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реА рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рдЗрдирд┐рдЯ рдлрд╝рд╛рдЗрд▓ (рдРрдк / __ init__.py рдлрд╝рд╛рдЗрд▓) рд╣реИ:
 from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config.from_object('config') db = SQLAlchemy(app) from app import views, models 


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

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЙрдбрд▓


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

рдЖрдЗрдП рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ред WWW SQL рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдмрдирд╛рдП:


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

nickname рдФрд░ email рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╢рдмреНрджрдЬрд╛рд▓ рдореЗрдВ VARCHAR ) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреА рдЕрдзрд┐рдХрддрдо рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

role рдХреНрд╖реЗрддреНрд░ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреМрди рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╢рд╛рд╕рдХ рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдирд╣реАрдВ рд╣реИрдВред

рдЕрдм рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдм рдХреЛ рдХреЛрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ (рдлрд╝рд╛рдЗрд▓ рдРрдк / рдореЙрдбрд▓ рдУрдбреАрдПрдо):
 from app import db ROLE_USER = 0 ROLE_ADMIN = 1 class User(db.Model): id = db.Column(db.Integer, primary_key = True) nickname = db.Column(db.String(64), index = True, unique = True) email = db.Column(db.String(120), index = True, unique = True) role = db.Column(db.SmallInteger, default = ROLE_USER) def __repr__(self): return '<User %r>' % (self.nickname) 


рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЕрднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ User рд╡рд░реНрдЧ рдХрдИ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╡рд░реНрдЧ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд╝реАрд▓реНрдб db.Column рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЕрдиреНрдп рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ, рдЬреЛ рд╣рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдлрд╝реАрд▓реНрдб рдЕрджреНрд╡рд┐рддреАрдп рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рд╣реИрдВред

__repr__ рд╡рд┐рдзрд┐ рдкрд╛рдпрдерди рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред

рдбреЗрдЯрд╛рдмреЗрд╕ рдирд┐рд░реНрдорд╛рдг


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

рдпрд╣рд╛рдБ рд╡рд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рддрд╛ рд╣реИ (db_create.py рдлрд╝рд╛рдЗрд▓):
 #!flask/bin/python from migrate.versioning import api from config import SQLALCHEMY_DATABASE_URI from config import SQLALCHEMY_MIGRATE_REPO from app import db import os.path db.create_all() if not os.path.exists(SQLALCHEMY_MIGRATE_REPO): api.create(SQLALCHEMY_MIGRATE_REPO, 'database repository') api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) else: api.version_control(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, api.version(SQLALCHEMY_MIGRATE_REPO)) 


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

рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ (рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╣реИрдВ, рддреЛ рдХрдорд╛рдВрдб рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ):
 ./db_create.py 


рдХрдорд╛рдВрдб рдбрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ app.db рдлрд╛рдЗрд▓ рдорд┐рд▓реЗрдЧрд╛ред рдпрд╣ рдПрдХ рдЦрд╛рд▓реА sqlite рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ db_repository рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рднреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрдВрджрд░ рдХрдИ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, SQLAlchemy-migrate рдЕрдкрдиреА рдбреЗрдЯрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рддреЛ рд╣рдо рднрдВрдбрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдпрд╣ рд╣рдореЗрдВ рдореМрдЬреВрджрд╛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдкреНрд░рд╡рд╛рд╕


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

рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдФрд░ рд╕рд╣рд╛рдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ (db_migrate.py рдлрд╝рд╛рдЗрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
 #!flask/bin/python import imp from migrate.versioning import api from app import db from config import SQLALCHEMY_DATABASE_URI from config import SQLALCHEMY_MIGRATE_REPO migration = SQLALCHEMY_MIGRATE_REPO + '/versions/%03d_migration.py' % (api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) + 1) tmp_module = imp.new_module('old_model') old_model = api.create_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) exec old_model in tmp_module.__dict__ script = api.make_update_script_for_model(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, tmp_module.meta, db.metadata) open(migration, "wt").write(script) api.upgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) print 'New migration saved as ' + migration print 'Current database version: ' + str(api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)) 


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрдЯрд┐рд▓ рд▓рдЧ рд░рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд╛ рдХрд░рддрд╛ рд╣реИред SQLAlchemy-migrate рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣рдорд╛рд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ ( app.db рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд) рдФрд░ рд╣рдорд╛рд░реА рдореЙрдбрд▓ рд╕рдВрд░рдЪрдирд╛ ( app.db рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд) рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИред рдЙрдирдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рднрдВрдбрд╛рд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдпрд╛ рдЗрд╕реЗ рд░рджреНрдж рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЬрд╛рдирддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдлреЙрд░реНрдореЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдпрд╛ "рд░реЛрд▓ рдмреИрдХ" рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреАрдврд╝реА рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рдореИрдВ рдпрд╣ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдХрдИ рдмрд╛рд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдмрд╕ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдкреНрд░рд╛рд░реВрдк рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛, рдХреНрдпрд╛ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЧрдП рдереЗред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд SQLAlchemy-migrate рдореЗрдВ SQLAlchemy-migrate рдХреЗ рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрднреА рднреА рдореМрдЬреВрджрд╛ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рдмрджрд▓рддрд╛, рдореЙрдбрд▓ рдпрд╛ рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ / рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдмрдирд╛рдП рдЧрдП рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдФрд░ рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рдпрд╣ рд╕рд╣реА рд╣реИред

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

рддреЛ рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдирд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 ./db_migrate.py 


рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реЛрдЧрд╛:
 New migration saved as db_repository/versions/001_migration.py Current database version: 1 


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

рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдФрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░реЗрдВ


рдЕрдм рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИред

рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдЖрд╡реЗрджрди рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐ рднреА рд╣реИ, рдЬреЛ рдПрдХ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдкрд░ рддреИрдирд╛рдд рд╣реИред

рдХрд╣рддреЗ рд╣реИрдВ, рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреА рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рдмрд┐рдирд╛, рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░реНрдпрд╢реАрд▓ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ, рдлрд┐рд░ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рдорд░реНрдерди рд╣реИ, рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрди рд╕рд░реНрд╡рд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдмрд╕ рдирдпрд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдВ рдЬреЛ рдЖрдкрдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЗрд╕ рдЫреЛрдЯреЗ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ (db_upgrad.py рдлрд╝рд╛рдЗрд▓) рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 #!flask/bin/python from migrate.versioning import api from config import SQLALCHEMY_DATABASE_URI from config import SQLALCHEMY_MIGRATE_REPO v = api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO) api.downgrade(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO, v - 1) print 'Current database version: ' + str(api.db_version(SQLALCHEMY_DATABASE_URI, SQLALCHEMY_MIGRATE_REPO)) 


рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдПрдХ рд╕рдВрд╢реЛрдзрди рджреНрд╡рд╛рд░рд╛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░реЗрдЧреАред рдЖрдк рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдХрдИ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрдмрдВрдз


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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкреЛрд╕реНрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реЛрдз рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдкреЛрд╕реНрдЯ рд╣реЛ рддреЛ рд╕рдмрд╕реЗ рддреБрдЪреНрдЫ рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдЗрд╕реЗ рд▓рд┐рдЦрд╛ рдерд╛ред рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рд╕рд╡рд╛рд▓ рдЗрд╕ рдХрд╛ рдЙрд▓реНрдЯрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд┐рдд рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред Flask-SQLAlchemy рд╣рдореЗрдВ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░реЗрдЧрд╛ред

рд╣рдо рдкрджреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╣рдо рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рджреЗрдЦ рд╕рдХреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдЯреВрд▓ рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗ рдФрд░ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВрдЧреЗ:


рд░рд┐рдХреЙрд░реНрдб рдХреА рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣реЛрдЧрд╛: рдЖрдИрдбреА, рд░рд┐рдХреЙрд░реНрдб рдФрд░ рддрд╛рд░реАрдЦ рдХрд╛ рдкрд╛рдаред рдХреЛрдИ рдирдИ рдмрд╛рдд рдирд╣реАрдВред рд▓реЗрдХрд┐рди user_id рдлрд╝реАрд▓реНрдб рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдпреЛрдЧреНрдп рд╣реИред

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

рдЖрдЗрдП рдЗрди рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдореЙрдбрд▓ рдмрджрд▓реЗрдВ (рдРрдк / рдореЙрдбрд▓ рдУрдбреАрдПрдо):
 from app import db ROLE_USER = 0 ROLE_ADMIN = 1 class User(db.Model): id = db.Column(db.Integer, primary_key = True) nickname = db.Column(db.String(64), unique = True) email = db.Column(db.String(120), unique = True) role = db.Column(db.SmallInteger, default = ROLE_USER) posts = db.relationship('Post', backref = 'author', lazy = 'dynamic') def __repr__(self): return '<User %r>' % (self.nickname) class Post(db.Model): id = db.Column(db.Integer, primary_key = True) body = db.Column(db.String(140)) timestamp = db.Column(db.DateTime) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) def __repr__(self): return '<Post %r>' % (self.body) 


рд╣рдордиреЗ Post рдХреНрд▓рд╛рд╕ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреНрд▓реЙрдЧ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛ред рдкреЛрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рдореЗрдВ user_id рдлрд╝реАрд▓реНрдб рдХреЛ рдПрдХ рд╡рд┐рджреЗрд╢реА рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП Flask-SQLAlchemy рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝реАрд▓реНрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рд╣реЛрдЧреАред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдордиреЗ User рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдирдпрд╛ posts рдлрд╝реАрд▓реНрдб рднреА рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕реЗ db.relationship рдлрд╝реАрд▓реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдбреАрдмреА рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░реЗ рдЖрд░реЗрдЦ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдПрдХ-рд╕реЗ-рдХрдИ db.relationship рдлрд╝реАрд▓реНрдб db.relationship рдЖрдорддреМрд░ рдкрд░ "рдПрдХ" рдкрдХреНрд╖ рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ user.posts рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИред db.relationship рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ "рдХрдИ" рд╡рд░реНрдЧ рдХреА рдУрд░ db.relationship рдХрд░рддрд╛ рд╣реИред backref рддрд░реНрдХ "рдХрдИ" рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ "рдПрдХ" рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо post.author рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред User рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрдирд╛рдИ рдЧрдИ рдереАред рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ рдЕрдЧрд░ рдпреЗ рд╡рд┐рд╡рд░рдг рдЖрдкрдХреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВрдЧреЗред

рдЖрдЗрдП рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдкреНрд░рд╡рд╛рд╕ рд▓рд┐рдЦреЗрдВред рдмрд╕ рдЪрд▓рд╛рдПрдВ:
 ./db_migrate.py 


рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА:
 New migration saved as db_repository/versions/002_migration.py Current database version: 2 


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

рд▓реЙрдиреНрдЪ рдХрд╛ рд╕рдордп


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

рдкрд╛рдпрдерди рдЪрд▓рд╛рдПрдВред рд▓рд┐рдирдХреНрд╕ рдпрд╛ OS X рдкрд░:
 flask/bin/python 


рдпрд╛ рд╡рд┐рдВрдбреЛрдЬ рдкрд░:
 flask\Scripts\python 


рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 >>> from app import db, models >>> 


рдпрд╣ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдореЙрдбрд▓ рдХреЛ рдпрд╛рдж рдХрд░реЗрдЧрд╛ред

рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБ:
 >>> u = models.User(nickname='john', email='john@email.com', role=models.ROLE_USER) >>> db.session.add(u) >>> db.session.commit() >>> 


рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд░реНрддрдорд╛рди рд╕рддреНрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╕рддреНрд░ рдореЗрдВ рдХрдИ рдкрд░рд┐рд╡рд░реНрддрди рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЬреИрд╕реЗ рд╣реА рд╡реЗ рд╕рднреА рдкрдВрдЬреАрдХреГрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЖрдк рдПрдХ db.session.commit() рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рд╕рддреНрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ db.session.rollback() рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд╕рддреНрд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рди рддреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдФрд░ рди рд╣реА рд░реЛрд▓рдмреИрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рддреНрд░ рдХреЛ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░реЗрдЧрд╛ред рд╕рддреНрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрднреА рднреА рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рди рд░рд╣реЗред

рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝реЗрдВ:
 >>> u = models.User(nickname='susan', email='susan@email.com', role=models.ROLE_USER) >>> db.session.add(u) >>> db.session.commit() >>> 


рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 >>> users = models.User.query.all() >>> print users [<User u'john'>, <User u'susan'>] >>> for u in users: ... print u.id,u.nickname ... 1 john 2 susan >>> 


рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рдХрд╕реНрдЯрдо рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рднреА рдореЙрдбрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╕реЗрдЯ рдХреА рдЧрдИ рдереАред

рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдХреНрд╡реЗрд░реА рд╡рд┐рдХрд▓реНрдк рд╣реИред рдпрджрд┐ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдбреА рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
 >>> u = models.User.query.get(1) >>> print u <User u'john'> >>> 


рдЕрдм рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдЬреЛрдбрд╝реЗрдВ:
 >>> import datetime >>> u = models.User.query.get(1) >>> p = models.Post(body='my first post!', timestamp=datetime.datetime.utcnow(), author=u) >>> db.session.add(p) >>> db.session.commit() 


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

рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдордиреЗ Post class рдореЗрдВ user_id рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЕрдкрдиреЗ author рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдВрджрд░ User рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдЖрднрд╛рд╕реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рд░рд┐рд╢реНрддреЛрдВ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд▓рд╛рд╕реНрдХ-рдПрд╕рдХреНрдпреВрдПрд▓рдЪреЗрдореА рджреНрд╡рд╛рд░рд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рд╣рдордиреЗ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЗ db.relationship рдореЗрдВ backref рддрд░реНрдХ рдореЗрдВ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдирд╛рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде, ORM рдкрд░рдд рдХреЛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП user_id рдХреЛ рдХреИрд╕реЗ рдЖрдмрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЗрд╕ рд╕рддреНрд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреБрдЫ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 #     >>> u = models.User.query.get(1) >>> print u <User u'john'> >>> posts = u.posts.all() >>> print posts [<Post u'my first post!'>] #     >>> for p in posts: ... print p.id,p.author.nickname,p.body ... 1 john my first post! #    >>> u = models.User.query.get(2) >>> print u <User u'susan'> >>> print u.posts.all() [] #        >>> print models.User.query.order_by('nickname desc').all() [<User u'susan'>, <User u'john'>] >>> 


рдлреНрд▓рд╛рд╕реНрдХ-SQLAlchemy рдкреНрд░рд▓реЗрдЦрди рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рд╣реИред

рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рд╣рдо рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдЕрдЧрд▓реЗ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдмрдирд╛рдПрдВ:
 >>> users = models.User.query.all() >>> for u in users: ... db.session.delete(u) ... >>> posts = models.Post.query.all() >>> for p in posts: ... db.session.delete(p) ... >>> db.session.commit() >>> 


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


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

рдЗрд╕ рдмреАрдЪ, рдпрджрд┐ рдЖрдк рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
microblog-0.4.zip

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ, рдореИрдВрдиреЗ рдКрдкрд░ рдХреЗ рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИред рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ db_create.py рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдлрд┐рд░ db_upgrad.py, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╢реЛрдзрди рдореЗрдВ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЖрдкрд╕реЗ рдлрд┐рд░ рдорд┐рд▓рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ!

рдорд┐рдЧреБрдПрд▓ред

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


All Articles