styleru.py lecture 3

ilebedev

			styleru.py
		

Сегодня в программе

SQL


			SELECT, WHERE, GROUP BY, HAVING, ORDER BY,
			JOIN, INSERT, UPDATE, CREATE, DELETE
		

Чеклист для БД любого проекта

 


     SELECT * FROM users WHERE login='ilebedev';
		

 

engine.execute(
    "SELECT * FROM users WHERE login='ilebedev';"
)
		

 

users = engine.execute(
    "SELECT * FROM users WHERE login='ilebedev';"
).fetchall()
		

 

def get_users(login):
	return engine.execute(
    	"SELECT * FROM users WHERE login='%s';" % login
	).fetchall()
		

 

def get_users(login):
	return engine.execute(
    	"SELECT * FROM users WHERE login='%s';" % login
	).fetchall()
		

 

def get_users(login):
	return engine.execute(
    	"SELECT * FROM users WHERE login='%s';" % login
	).fetchall()



get_users("' OR '1' = '1")  # вернёт ВСЕХ пользователей
		

SQL injection

def get_users(login):
	return engine.execute(
    	"SELECT * FROM users WHERE login='%s';" % login
	).fetchall()



get_users("' OR '1' = '1")  # вернёт ВСЕХ пользователей
		

SQL injection

def get_users(login):
	return engine.execute(
    	"SELECT * FROM users WHERE login='%s';" % login
	).fetchall()



get_users("' OR '1' = '1")  # вернёт ВСЕХ пользователей
# SELECT * FROM users WHERE login='' OR '1' = '1'
		

SQL injection

def get_users(login):
	return engine.execute(
    	"SELECT * FROM users WHERE login='%s';" % login
	).fetchall()
		

SQL injection

def get_users(login):
	return engine.execute(
    	"SELECT * FROM users WHERE login=?;", login
	).fetchall()
		

 

def get_users(login, only_active=False):
	query = "SELECT * FROM users WHERE login=?"
	if only_active:
		query += " AND is_active"
	return engine.execute(query, login).fetchall()
		

 

def get_users(login, only_active=False, with_statistics=False):
	query = "SELECT * FROM users WHERE login=?"
	if only_active:
		query += " AND is_active"
	if with_statistics:
		query += "JOIN user_stat ON user_stat.user_id = user.id"
	return engine.execute(query, login).fetchall()
		

 

def get_users(login, only_active=False):
	users = User.filter(login=login)
	if only_active:
		users = users.active()
	return users
		

ORM

def get_users(login, only_active=False):
	users = User.filter(login=login)
	if only_active:
		users = users.active()
	return users
		

ORM

def get_users(login, only_active=False):
	users = User.filter(login=login)
	if only_active:
		users = users.active()
	return users


for user in get_users('styleru.py'):
	print user.id
		

ORM

session.query(
        payment.CurrencyRate.rate,
        payment.CurrencyRate.date_start
    ).filter(
        and_(
            payment.CurrencyRate.date_start <= date_to,
            payment.CurrencyRate.currency.in_(currency_types),
            or_(
                payment.CurrencyRate.date_stop == None,
                payment.CurrencyRate.date_stop >= date_from,
            )
        )
    ).order_by(
        payment.CurrencyRate.date_start,
    )

Популярные ORM

Модель


class User(AbstractCore):
    id = Column(BigInteger, primary_key=True)
    email = Column(String(255), nullable=False)
    first_name = Column('fname', String(255, convert_unicode=True), nullable=True)
    last_name = Column('lname', String(255, convert_unicode=True), nullable=True)
    middle_name = Column('mname', String(255, convert_unicode=True), nullable=True)
		

Модель


class User(AbstractCore):
    id = Column(BigInteger, primary_key=True)
	...

	def is_user_online(self):
		online_user_ids = [s.user_id for s in get_sessions()]
		return self.id in online_user_ids
		

Шаблон


<body>
	Список статей:
	<ul>
	{% for article in articles %}
		<li>{{ article.title }} ({{ article.author }})</li>
	{% endfor %}
	</ul>
</body>
		

 

 

 

Model-View-Controller

Model-View-Controller

Model-View-Controller

Исключения

page_num = int(
	input(u'Введите номер страницы: ')
)
		

 

Заходит однажды тестировщик в бар.
Забегает в бар.
Пролезает в бар.
Танцуя, проникает в бар.
Крадется в бар.
Врывается в бар.
Прыгает в бар.

 

и заказывает:
кружку пива,
2 кружки пива,
0 кружек пива,
999999999 кружек пива,
ящерицу в стакане,
–1 кружку пива,
ававав кружек пива.

Исключения

page_num = int(
	input(u'Введите номер страницы: ')
)
		

Исключения

page_num = int(
	input(u'Введите номер страницы: ')
)
		

ValueError: invalid literal for int() with base 10: 'avavav'
		

Исключения

BaseException
 +-- KeyboardInterrupt
 +-- Exception
      +-- StopIteration
      +-- StandardError
      |    +-- BufferError
      |    +-- ArithmeticError
      |    +-- ImportError
      |    +-- ValueError
		   +-- ...
	  +-- ...
		

Исключения

try:
    page_num = int(
		input(u'Введите номер страницы: ')
	)
except ValueError:
	print 'Incorrect integer value'
		

Исключения

 

Программист тыкает в кнопочки и жмакает курсором.

Хоткеи

Хоткеи

Хоткеи