SQLAlchemy е SQL инструмент, създаден с Python, който предоставя на разработчиците изобилие от мощни функции за проектиране и управление на високопроизводителни бази данни.
Ще разгледаме накратко как да използваме SQLAlchemy и след това ще се потопим по-дълбоко в това как да изпълняваме необработени SQL изрази от комфорта на езика на домейна Python.
Използване на SQLAlchemy
Както при всички библиотеки на Python, започнете с инсталиране на SQLAlchemy. След като бъде инсталиран, можем да започнем да се забавляваме в Python.
След това импортирайте sqlalchemy
себе си, след това импортирайте няколко модула, за да можем лесно да получим достъп до базата данни SQLAlchemy:
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy import inspect
В допълнение към create_engine
, ние също така импортираме редица допълнителни модули, които ще са ни необходими за създаване на нова таблица. Преди да стигнем до това, уверете се, че SQLAlchemy е инсталиран, импортиран и работи, като извикате .__version__
така:
print sqlalchemy.__version__
Out[*]: 1.0.9
Създаване на таблица
Ще използваме основната функционалност на SQLAlchemy, която е SQL Expression Language, за да създадем някои metadata
който ще съдържа редица свързани модули (или обекти), които дефинират нашата нова book
таблица на базата данни:
metadata = MetaData()
books = Table('book', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('primary_author', String),
)
engine = create_engine('sqlite:///bookstore.db')
metadata.create_all(engine)
В горната част дефинираме metadata
, след това го предаваме в Table()
метод, където даваме на нашата таблица името book
. В рамките на това ние дефинираме всяка колона, заедно с важни атрибути като тип данни и primary_key
.
След като нашите таблици са дефинирани и свързани с нашите metadata
обект, трябва да създадем машина за база данни, с която можем да се свържем. Това се постига с помощта на create_engine
функция.
engine = create_engine('sqlite:///bookstore.db')
За нашия пример ще използваме прост SQLite
база данни. Можете също да използвате низове за свързване за други машини като MySQL или PostgreSQL. Ето примерен синтаксис за създаване на машина за PostgreSQL:
engine = create_engine('postgresql://user:password@host/database')
Със създадения двигател, сега трябва да използваме .create_all()
метод на нашите metadata
обект и предайте engine
връзка с него, което автоматично ще накара SQLAlchemy да генерира нашата таблица за нас, както се вижда по-горе.
След като приключим, можем да използваме таблицата, както сметнем за добре. В този прост пример просто ще използваме inspect
модул, за да видите колоните и да проверите, че нашата таблица е създадена успешно:
inspector = inspect(engine)
inspector.get_columns('book')
Out[*]:
[{'autoincrement': True,
'default': None,
'name': u'id',
'nullable': False,
'primary_key': 1,
'type': INTEGER()},
{'autoincrement': True,
'default': None,
'name': u'title',
'nullable': True,
'primary_key': 0,
'type': VARCHAR()},
{'autoincrement': True,
'default': None,
'name': u'primary_author',
'nullable': True,
'primary_key': 0,
'type': VARCHAR()}]
Разбира се, с помощта на .get_columns()
метод за нашата book
таблица, виждаме, че нашите три колони са генерирани.
Изпълнение на SQL изявления
С основите вече можем да опитаме да изпълним някакъв необработен SQL с помощта на SQLAlchemy.
Използване на текстовия модул
Един метод за изпълнение на необработен SQL е използването на text
модул или Textual SQL
. Най-четливият начин за използване на text
е да импортирате модула, след това след свързване към engine
, дефинирайте text
Низ на SQL израз преди да използвате .execute
за да го стартирате:
from sqlalchemy.sql import text
with engine.connect() as con:
data = ( { "id": 1, "title": "The Hobbit", "primary_author": "Tolkien" },
{ "id": 2, "title": "The Silmarillion", "primary_author": "Tolkien" },
)
statement = text("""INSERT INTO book(id, title, primary_author) VALUES(:id, :title, :primary_author)""")
for line in data:
con.execute(statement, **line)
Тук вмъкваме два записа в нашата база данни с помощта на text()
-дефиниран израз.
Използване на метода за изпълнение
Алтернативният метод е да пропуснете с помощта на text()
и предайте необработен SQL низ към .execute()
метод. Например, тук ще използваме .execute()
за да видите новите записи, които вмъкнахме по-горе:
with engine.connect() as con:
rs = con.execute('SELECT * FROM book')
for row in rs:
print row
Out[*]:
(4, u'The Hobbit', u'Tolkien')
(5, u'The Silmarillion', u'Tolkien')
Ето го! Прости и ефективни методи за изпълнение на необработени SQL изрази в SQLAlchemy.