12 апреля 2017 г. 18:27

1108

Sqlalchemy для новичков

SQLAlchemy — это программная библиотека на языке Python для работы с реляционными СУБД с применением технологии ORM. В данной статье мы рассмотрим , что такое SQLAlchemy , опишем с помощью нее таблицы и реализуем запросы извлечения и записи данных.

Для чего нам необходим SqlAlchemy?

Мы можем описать структуры базы данных и взаимодействовать с ними с помощью языка Python. Это позволяет нам не писать голые sql-запросы , что свою очередь позволяет повысить читабельность кода и нам не придется задумываться об экранировании , что свою очередь позволяет защититься от sql-инъекций.

И еще благодаря SQLAlchemy мы можем использовать различные СУБД(Mysql, Postgresql)

Сначала установим саму библиотеку:

pip install SQLAlchemy

Напишем простой скрипт, который подключается к базе данных, определим таблицу Post, сохраним пару записей и выведем их.

В качестве базы данных я использую Postgresql. но вы можете использовать mysql, sqlite или другие базы данных. Единственное что вам нужно будет поменять настройки подключения к базе данных , а остальной код будет работать без изменения

Определим словарь DATABASES с настройками подключения


DATABASE = {
    'drivername': 'postgres', #Тут можно использовать mysql или другой драйвер
    'host': 'localhost',
    'port': '5432',
    'username': 'youuser',
    'password': 'youpass',
    'database': youdbt'
}

Подключаемся к БД


from sqlalchemy import create_engine
from sqlalchemy.engine.url import URL
engine  = create_engine(URL(**DATABASE))

Это аналогично :


from sqlalchemy import create_engine
engine  = create_engine('postgres://postgres:postgres@localhost:5432/chadocontent')

Далее , нам необходимо декларировать таблицу

Теперь создадим главную функцию, которая будет вызываться при запуске скрипта и там подключимся к sqlalchemy.



def main():
    engine = create_engine(URL(**DATABASE))
    DeclarativeBase.metadata.create_all(engine)
    Session = sessionmaker(bind=engine)
    session = Session()

if __name__ == "__main__":
    main()

Теперь попробуем записать в нашу таблицу первую запись.


#Создаем новую запись.
new_post = Post(name='Two record', url="http://testsite.ru/first_record")
# Добавляем запись
session.add(new_post)

#А теперь попробуем вывести все посты , которые есть в нашей таблице
for post in session.query(Post):
    print(post)

Все прекрасно работает. Мы добавляем новый пост и он выводится при запросе. Но если мы посмотрим в саму базу данных . то заметим , что таблица пустая и никакие записи туда не добавляются.Чтобы наша запись добавилась в таблице в базе данных , то нам нужно дописать следующую строчку


#Создаем новую запись.
new_post = Post(name='Two record', url="http://testsite.ru/first_record")
# Добавляем запись
session.add(new_post)
#Благодаря этой строчке мы добавляем данные а таблицу
session.commit()
#А теперь попробуем вывести все посты , которые есть в нашей таблице
for post in session.query(Post):
    print(post)

Подробнее остановимся на строчке session.commit() , которая применяет все изменения в базу данных и фиксирует все транзакции.Если транзакция не выполняется то вызывается InvalidRequestError. После выполнения данного метода начинается новая транзакция

Заключение

Это была вводная статья , где мы рассмотрели как подключится к базе данных используя sqlalchemy , а также определили таблицу и добавили в эту таблицу несколько строк , но при этом не написали ни одну строчку SQL, а все сделали с помощью кода python

comments powered by Disqus