⌨ Labor omnia vincit ☮

SQLAlchemy – examples, tips and tricks

Posted in python by anaumov on 06.06.2014

Мне не так часто приходится работать с базами данных, поэтому каждый раз, когда все же нужно тянуть какие-нибудь данные или наоборот – загружать их в БД, приходиться вспоминать базовые команды и искать свои старые python-скрипты. Решил написать для себя маленькую шпаргалку, дабы не приходилось каждый раз спрашивать google. Это просто python-примеры для SQLAlchemy. Пост будет постоянно дополняться и обновляться в зависимости от изменений в самой библиотеке. Другие примеры вы можете найти на wikibooks.org или на Python Central.
Если у вас есть какие-нибудь замечания или вопрсоы по поводу кода, не стесняйтесь оставлять комментарии.

Соединение с базой данных

Подключаемся к БД mysql, IP которой 111.111.111.111 и порт 3306. В ней выбираем БД name_of_DB. Для авторизации используем пользователя user_name с паролем PaSsWoRd. Интерфейс, через который мы будем работать с БД, назывется engine. Для его создания вызываем функцию create_engine и передаем ей наш dictonary DATABASE.

Если не возникло никаких проблем и мы установили соединение с БД, то при помоши execute мы можем слать SQL-запросы. Да, тут не нужен какой-то свой язык или правила, запросы мы пишем на языке, понятной БД (в моем случае MySQL).

Вот простой пример запроса к БД. Тут мы просто далаем SHOW запрос к таблице nagios_server, т.е. запрашиваем информацию о таблице. Потом пробегаемся по результату и выводим его на экран.

#!/usr/bin/env python

from sqlalchemy import *
from sqlalchemy.engine.url import URL

import subprocess as sp
import os

def get_ip():
    DATABASE = {'drivername': 'mysql',
        'host': '111.111.111.111',
        'port': '3306',
        'username': 'user_name',
        'password': 'PaSsWoRd',
        'database': 'name_of_DB'}

    engine = create_engine(URL(**DATABASE))
    for i in engine.execute("SHOW columns FROM nagios_server"):
        print i[0]

Результат выглядит следующим образом.

id
name
localhost
is_default
last_restart
ns_ip_address
ns_activate
ns_status
init_script
monitoring_engine
nagios_bin
nagiostats_bin
nagios_perfdata
centreonbroker_cfg_path
centreonbroker_module_path
centreonconnector_path
ssh_port
ssh_private_key
init_script_snmptt

В данном примере тип данных каждой i не список, а “class ‘sqlalchemy.engine.base.RowProxy’, тем не менее с этим типом данных можно так же играться как и со списками. Как вы видете, я вывожу на экран только перевый элемент из каждого списка (это имена столбцов в таблице).

Так как SQLAlchemy не накладывает никаких ограничений или дополнительных правил на язык запросов, пользоваться им сможет каждый кто знает SQL.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: