Найти - Пользователи
Полная версия: насущные вопросы по sqlalchemy и не только
Начало » Python для новичков » насущные вопросы по sqlalchemy и не только
1
delphiworld
Здравствуйте, уважаемые форумчане
Предисловие: 2 дня назад решил окончательно отказаться от PHP в пользу Python/Ruby
После значительно долгих просмотров интернетов остановил свой выбор на Python по причине понятности и широкой области применения
Мой выбор пал на фреймворк Django(кто бы сомневался?), но надолго меня не хватило, документация очень забита ненужными мне фичами, которые из виду опускать не получается. После этого на stackoverflow нашел рекомендации от питон-гуру в пользу микро-фреймворков, коим, например, является Flask.

Изучаю доку и примеры с огромным удовольствием. Но, к сожалению, я пока не понимаю как работают реальные приложения.

Докопался до драйвера SQLAlchemy, который породил сразу несколько вопросов:
- Делается ли в работающих проектах import определенных методов из классов-библиотек
from bar import foo
, или пишется тупо
import bar
со всеми внутренними методами?
- Как с прослойками? Создаете ли вы классы-оболочки db с методами вроде query внутри? Или же работаете с драйвером напрямую?
-
from flask import Flask, url_for
>>> app = Flask(__name__)
>>> @app.route(/)
... def index(): pass
...
>>> @app.route(/login)
... def login(): pass
...
>>> @app.route(/user/<username>)
... def profile(username): pass
...
>>> with app.test_request_context():
... print url_for(index)
... print url_for(login)
... print url_for(login, next=/)
... print url_for(profile, username=John Doe)
Не нашел понятного объяснения как готовить конструкцию with
cutwater
Упоминание в одном посте слов delphi и PHP на питон форуме смахивает на толстый неприкрытый троллинг.

- Делается ли в работающих проектах import определенных методов из классов-библиотек
По желанию. В зависимости от того как удобнее.

- Как с прослойками? Создаете ли вы классы-оболочки db с методами вроде query внутри? Или же работаете с драйвером напрямую?
Не совсем понятен вопрос. Точнее совсем непонятен. sqlalchemy полностью скрывает работу с драйвером базы данных.
А вот сгруппировать запросы к базе в функции и поместить в отдельный пакет \ модуль зачастую бывает полезно. Особенно при рефакторинге или расширении кода.
delphiworld
Питонистов троллят рубисты, вроде как. Я не такой
sqlalchemy интерфейс
из примеров на офф сайте:
from sqlalchemy import Column, Integer, String
>>> class User(Base):
...     __tablename__ = 'users'
...
...     id = Column(Integer, primary_key=True)
...     name = Column(String)
...     fullname = Column(String)
...     password = Column(String)
...
...     def __init__(self, name, fullname, password):
...         self.name = name
...         self.fullname = fullname
...         self.password = password
...
...     def __repr__(self):
...        return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
такие штуки как Integer, String совсем не радуют. т.е. питон обращается к ним не как к методам класса объекта sqlalchemy, а как к каким-то внутренним функциям языка
именно по этому беспокоит целесообразность использовать
from bar import foo
вместо подключения класса целиком

Практический пример:
Есть некая фриланс-биржа. В ней предусмотрено 2 профиля - заказчик и исполнитель. На уровне СУБД у нас следующая архитектура: 2 таблицы users_contractors, users_freelancers
На программном уровне имеем 2 класса user_contractor и user_freelancer с методами get_user_data
Я думаю должно считаться правилом хорошего тона писать from user_contractor import get_user_data , это и понятно какой функционал задействован, и не загромождает пространство имен(для второго справедливо)
Подозреваю, что на этапе запуска будет выброшено исключение
Как обойти?
cutwater
именно по этому беспокоит целесообразность использовать

я обычно делаю

import sqlalchemy as sa

И использую в виде
sa.Column(sa.Integer, primary_key=True)
sergeek
sqlalchemy это модуль, а не класс. Column и т.д - это классы а не методы. Из класса нельзя ничего импортировать. С префиксом просто некрасиво все это смотрится поэтому и делают через from
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB