Рубрики
Без рубрики

Еще один пошаговый учебник SQLALCHEMY (часть 1 из 2)

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Давным-давно (около 2007 года, если Google обслуживает меня правильно), был программист Python по имени Робин Мунн Кто написал действительно хороший Учебное пособие на SQLalchemy Отказ Первоначально он был основан на выпуске 0.1, но обновляется для более нового 0,2. Затем мистер Мунн только что исчез, и учебник никогда не был обновлен. Я пинал идею выпустить свою собственную версию этого руководства в течение довольно некоторого времени и, наконец, решил просто сделать это. Я надеюсь, что вы найдете эту статью полезную, поскольку я нашел оригинал.

Начиная

SQLALCHEMY обычно называют реляционным Mapper Objects (ORM), хотя он гораздо более полно, чем любой из других системных ОРМС, которые я использовал, такой как SQLOBJECT или тот, который встроен в Django. SQLALCHEMY был основан парень по имени Майкл Байер Отказ Я обычно вижу Джонатан Эллис ‘ Имя тоже много плавать вокруг проекта, особенно в Pycon Отказ

Этот учебник будет основан на последней выпущенной версии SQLALCHEMY: 0.5.8. Вы можете проверить вашу версию, выполняя следующее:

import sqlalchemy
print sqlalchemy.__version__

Примечание. Я также буду использовать Python 2.5 в Windows для тестирования. Однако этот код должен работать одинаково хорошо на Mac и Linux. Если вам нужна SQLALCHEMY для работы на Python 3, то вы хотите, чтобы SVN версию 0,6. Сайт дает инструкции о том, как сделать получение кода.

Если у вас нет SQLALCHEMY, вы можете Скачать Это с их сайта или используйте easy_install, если у вас есть SetUpeWools установлены. Давайте посмотрим, как:

В случае загрузки источника вам необходимо извлечь его, а затем открыть консольное окно (в Windows, перейдите к началу, запущению и введите «CMD», без кавычек). Затем измените каталоги, пока вы не будете в распакованной папке.

Чтобы установить SQLALCHEMY, вы можете нам пип:

PIP Установить SQLALCHEY

Это также предполагает, что у вас есть пип на вашем пути. Если вы этого не сделаете, то используйте полный путь для его использования (I.E. C: \ Python38 \ Screpts \ pip.exe или что-то еще).

Теперь мы можем создать наш первый пример, используя SQLALCHEMY. Мы создадим простую таблицу для хранения имени пользователя, их возраста и их пароль.

from sqlalchemy import create_engine
from sqlalchemy import MetaData, Column, Table, ForeignKey
from sqlalchemy import Integer, String

engine = create_engine('sqlite:///tutorial.db',
                       echo=True)

metadata = MetaData(bind=engine)

users_table = Table('users', metadata,
                    Column('id', Integer, primary_key=True),
                    Column('name', String(40)),
                    Column('age', Integer),
                    Column('password', String),
                    )

addresses_table = Table('addresses', metadata,
                        Column('id', Integer, primary_key=True),
                        Column('user_id', None, ForeignKey('users.id')),
                        Column('email_address', String, nullable=False)                            
                        )

# create tables in database
metadata.create_all()

Выглядит глубже

Как видите, нам нужно было импортировать различные биты и куски из пакета SQLALCHEMY, а именно Create_Engine, метаданные, столбец, стол, целое число и строку. Затем мы создаем «двигатель», который в основном является объектом, который знает, как общаться с предоставленной базой данных, используя учетные данные, которые вы поставляете. В этом случае мы используем базу данных SQLite, которая не нуждается в учетных данных. Есть Глубовные документы На эту тему один, где вы можете прочитать для вашего любимого вкуса базы данных. Также обратите внимание, что мы устанавливаем echo to true. Это означает, что SQLALCHEMY выпустит всю команду SQL, он выполняется на STDOUT. Это удобно для отладки, но должно быть установлено значение false, когда вы готовы поставить код в производство.

Далее мы создаем объект метаданных. Это крутое создание из команды SQLALCHEMY имеет все метаданные базы данных. Он состоит из объектов Python, которые удерживают описания таблиц и других объектов уровня схемы базы данных. Мы можем связать объект метаданных к нашей базе данных здесь или в create_all Заявление недалеко от конца кода.

Последний раздел – это то, как мы создаем таблицы программно. Это достигается с использованием таблицы SQLALCHEMY и объектов столбцов. Обратите внимание, что у нас есть различные типы полевых типов, таких как строка и целое число. Есть много других. Для этого примера мы создаем базу данных и именем его «пользователей», затем пропустите в наших объектах метаданных. Далее мы положили его в колонны. Колонна «ID» устанавливается как наш основной ключ. SQLalchemy будет волшебным образом увеличивать это для нас, как мы добавляем пользователей в базу данных. Столбец «Name» – это тип строки и ограничен длиной 40 символов. Столбец «Age» – это просто простое целое число, а столбец «Пароль» просто установлен на строку. Мы не установили ее длину, но мы, вероятно, должны. Единственная большая разница в адреса_table Как мы настроили атрибут внешнего ключа, который соединяет две таблицы. По сути, мы указываем на другой таблице, передавая правильное имя поля в строке в объект INSOLKIE.

Финальная линия этого фрагмента на самом деле создает базу данных и таблицу. Вы можете назвать это так часто, как вам нравится, так как он всегда проверит наличие указанной таблицы, прежде чем пытаться его создать. Это означает, что вы можете создавать дополнительные таблицы и вызов create_all и sqlalchemy только создадут новую таблицу.

SQLALCHEMY также предоставляет способ загрузить таблицы, которые были ранее созданы:

someTable = Table("users", metadata, autoload=True, schema="schemaName")

Я заметил, что с этим выпуском SQLALCHEMY получил симпатичную привиду в отношении схемы базы данных, указанную при автозагрузке базы данных. Если у вас есть этот вопрос, вам нужно добавить следующее определение таблицы:. Для получения дополнительной информации см. Документация Отказ

Вставка

Существует несколько способов добавления и извлечения информации из базы данных. Сначала мы посмотрим на низкоуровневые пути сначала, а затем в одной из других частей этой серии, мы перейдем к сеансам и декларативные стили, которые, как правило, немного более абстрактны. Давайте посмотрим на разные способы вставить данные в нашу базу данных:

# create an Insert object
ins = users_table.insert()
# add values to the Insert object
new_user = ins.values(name="Joe", age=20, password="pass")

# create a database connection
conn = engine.connect()
# add user to database by executing SQL
conn.execute(new_user)

Код выше показывает, как использовать объект подключения для выполнения вставки. Во-первых, вам нужно создать объект вставки, позвонив на таблицу Вставить метод. Тогда вы можете использовать вставку Значения Способ добавления необходимых значений для строки. Далее мы создаем объект подключения через двигатель соединить метод. Наконец, мы называем объект подключения Выполнить Метод на объекте вставки. Это звучит сложно, но это на самом деле довольно легко.

Этот следующий фрагмент показывает пару способов сделать вставку без объекта подключения:

# a connectionless way to Insert a user
ins = users_table.insert()
result = engine.execute(ins, name="Shinji", age=15, password="nihongo")

# another connectionless Insert
result = users_table.insert().execute(name="Martha", age=45, password="dingbat")

В обоих случаях вам нужно будет вызвать объект таблицы Вставить метод. По сути, вы просто возьмите двигатель из картины во втором экземпляре. Последний метод вставки мы рассмотрим, как вставить несколько строк:

conn.execute(users_table.insert(), [
    {"name": "Ted", "age":10, "password":"dink"},
    {"name": "Asahina", "age":25, "password":"nippon"},
    {"name": "Evan", "age":40, "password":"macaca"}
])

Это довольно неясно, но гейст состоит в том, что вам нужно использовать объект соединения с более раннего и пропустить два аргумента: объект вставки таблицы и список словарей, которые содержат имя столбца и пары значений. Обратите внимание, что, используя Выполнить Способ, данные преданы базу данных в этих примерах.

Теперь давайте перейдем к выбору.

Выбор

SQLALCHEMY обеспечивает надежный набор методов для выполнения выбора. Мы сосредоточимся на простых методах здесь. Для продвинутых вещей я рекомендую их Официальная документация и Список рассылки Отказ Одним из наиболее распространенных примеров является выберите все, поэтому давайте начнем с этого:

from sqlalchemy.sql import select

s = select([users_table])
result = s.execute()

for row in result:
    print row

Сначала мы должны импортировать Выберите Метод от SQLALCHEMY.SQL. Затем мы передаем это таблицу как один список элементов. Наконец мы называем выбранный объект Выполнить Способ и хранить возвращенные данные в Результат Переменная. Теперь, когда у нас есть все результаты, мы, вероятно, должны посмотреть, получим ли мы то, что мы ожидали. Таким образом, мы создаем для петля для итерации за результатом.

Если вам нужны все результаты в списке кортежей, а не объекта ROW, вы можете сделать следующее:

# get all the results in a list of tuples
conn = engine.connect()
res = conn.execute(s)
rows = res.fetchall()

И если вам просто нужен первый результат назад, вы используете Fetchone () вместо Fetchall ():

res = conn.execute(s)
row = res.fetchone()

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

s = select([users_table.c.name, users_table.c.age])
result = conn.execute(s)
for row in result:
    print row

Ну, это было довольно легко. Все, что нам нужно было сделать, это указать имена столбцов в нашем операторе выбора. Немного «C» в основном означает «столбец», поэтому мы делаем выбор на имя столбца и возраст столбца. Если у вас были несколько таблиц, то оператор SELECT будет чем-то вроде этого:

Выберите ([Tabone, TabletWo])

Конечно, это, вероятно, вернет повторяющиеся результаты, поэтому вы захотите сделать что-то подобное, чтобы смягчить проблему:

S ([Tabone, Tabletwo] ,. C.USER_ID)

SQLALCHEMY Документация Называется первым результатом декартовой продукт, поскольку он вызвал каждую строку с первой таблицы, которая будет производиться против каждой строки второй таблицы. Второе заявление выше исключает, что раздражение. Как? Ну, это так, как вы делаете предложение там, используя эту форму выбора. В следующей части серии я покажу другой способ сделать выбор и где с сеансами.

Вот еще пара примеров, хотя с объяснениями в комментариях:

from sqlalchemy.sql import and_

# The following is the equivalent to 
# SELECT * FROM users WHERE id > 3
s = select([users_table], users_table.c.id > 3)

# You can use the "and_" module to AND multiple fields together
s = select(and_(users_table.c.name=="Martha", users_table.c.age < 25))

Вышеуказанный код иллюстрирует, что SQLalchemy может использовать операторы и соединения в их запросах. Я рекомендую прочитать их документацию для полной информации здесь Отказ

Обертывание

Я думаю, что это хорошее место для нас, чтобы остановиться. Теперь мы узнали, как создавать базу данных, добавить строки и выбирать данные из нашей базы данных. В следующей части нашей серии мы узнаем, что более популярный способ сделать это, используя методы соотношения объектов. Мы также узнаем о нескольких других ключевых темах, таких как сессия SQLALCHEMY. Мы также посмотрим, как работает работает в SQLALCHEMY. Увидимся позже!

Дальнейшее чтение

Загрузки

  • SQLALCHEMY DEMO ONE.ZIP.
  • SQLALCHEMY DEMO ONE.TAR