Разное

Python db: Python: Работа с базой данных, часть 1/2: Используем DB-API / Хабр

Содержание

Как за считанные минуты написать простую игрушечную базу данных на Python 

MySQL, PostgreSQL, Oracle, Redis — все это вы называете просто базами данных, но, на самом деле, они являются крайне важным технологическим элементом в развитии человеческой цивилизации. Сегодня мы все понимаем, насколько ценны данные, а отсюда понимаем и важность обеспечения безопасности и стабильности — вот, где без хорошей базы данных никуда!

Мы увидели, насколько важны базы данных. Я давно думал о создании My Own Toy Database, чтобы разобраться, поиграть и поэкспериментировать с ней. Как сказал Ричард Фейнман:

» Я не понимаю того, что не могу создать сам «

И так, давайте уже без лишних разговоров перейдем к самой интересной части: кодированию. 

Начнем писать код …

Для этой игрушечной базы данных мы будем использовать Python (мой любимый ❤️). Я назвал эту базу данных FooBarDB (я не смог придумать другое имя 😉), но вы можете придумать другое название!

Итак, для начала давайте добавим некоторые импорты из стандартной библиотеки Python: 

import json
import os

Да, нам понадобятся только эти две библиотеки! Нам нужен json, так как наша база данных будет основана на JSON, а os — для некоторых вещей, связанных с настройкой paths.

Теперь давайте определим основной класс FoobarDB, который будет иметь некоторые довольно простые функции, работу которых я объясню ниже.

class FoobarDB(object):
   def __init__(self , location):
       self.location = os.path.expanduser(location)
       self.load(self.location)   def load(self , location):
       if os.path.exists(location):
           self._load()
       else:
           self.db = {}
       return True   def _load(self):
       self.db = json.load(open(self.location , "r"))   def dumpdb(self):
       try:
           json.dump(self.db , open(self.location, "w+"))
           return True
       except:
           return False

Здесь мы определили основной класс с функцией __init__. При создании базы данных Foobar нам нужно только указать ее местоположение. В первой функции __init__ мы берем параметр местоположения и заменяем тильду ~ или ~user на домашний каталог пользователя, что будет обеспечивать работу должным образом. И, наконец, поместите местоположение в переменную self.location для последующего доступа из тех же функций класса. Далее мы вызываем функцию загрузки, передавая self.location в качестве аргумента.

. . . .
   def load(self , location):
       if os.path.exists(location):
           self._load()
       else:
           self.db = {}
       return True
. . . .

В этой функции загрузки мы уже возьмем расположение базы данных в качестве параметра. Затем проверим, существует база данных или нет. Если она существует, мы запускаем функцию _load() (объяснено ниже как она работает). В противном случае мы создаем пустой JSON объект в памяти. И наконец, вернем true в случае успешного выполнения

. . . .   def _load(self):
       self.db = json.load(open(self.location , "r"))
. . . .

В функции _load мы просто открываем файл базы данных из местоположения, которое получаем из переменной self.location. Затем мы преобразуем его в JSON объект и загружаем в переменную self.db.

. . . .
   def dumpdb(self):
       try:
           json.dump(self.db , open(self.location, "w+"))
           return True
       except:
           return False. . . .

И, наконец, функция dumpdb: название говорит само за себя. Функция берет резидентную базу данных (на самом деле объект JSON) из переменной self.db и сохраняет ее в файле базы данных! Возвращает True если сохранение прошло успешно, иначе возвращает False.

Сделаем базу данных чуточку удобнее  … 😉

Подождите минуту! Не правда ли база данных бесполезна, если не может хранить и извлекать данные? Так пойдем и добавим эту функциональность … 😎

. . . .
   def set(self , key , value):
       try:
           self.db[str(key)] = value
           self.dumpdb()
           return True
       except Exception as e:
           print("[X] Error Saving Values to Database : " + str(e))
           return False   def get(self , key):
       try:
           return self.db[key]
       except KeyError:
           print("No Value Can Be Found for " + str(key))  
           return False   def delete(self , key):
       if not key in self.db:
           return False
       del self.db[key]
       self.dumpdb()
       return True
. . . .

Функция set — нужна для добавления данных в базу данных. Поскольку наша база данных реализована по простому принципу хранилища значений, доступ к которым осуществляется по ключу (key/value store), в качестве аргументов мы будем использовать только ключ и значение.

Сначала мы попытаемся добавить ключ и значение в базу данных, а затем сохранить ее. В случае успешно выполнения, получаем True. В противном случае мы получим сообщение об ошибке и False. (Мы не хотим, чтобы программа стирала наши данные каждый раз, когда происходит ошибка 😎).

. . . .
   def get(self, key):
       try:
           return self.db[key]
       except KeyError:
           return False
. . . .

get — это простая функция, мы берем ключ в качестве аргумента и пытаемся вернуть значение из базы данных. В противном случае получаем False с сообщением о ошибке.

. . . .
   def delete(self , key):
       if not key in self.db:
           return False
       del self.db[key]
       self.dumpdb()
       return True. . . .

Функция delete предназначается для удаления ключа и его значения из базы данных. Сначала убедитесь, что ключ присутствует в базе данных. Если нет, получаем False. Иначе мы удаляем ключ с помощью встроенной переменной del, которая автоматически удаляет его значение. Далее мы сохраняем базу данных и она возвращает false.

Вы можете подумать, а что если я создал большую базу данных и захочу сбросить ее? Теоретически, мы можем использовать функцию delete, но это не практично, а также затратно по времени! ⏳ Поступим лучше и создадим специальную функцию для этой задачи…

. . . .   def resetdb(self):
       self.db={}
       self.dumpdb()
       return True
. . . .

Встречайте! функция сброса данных resetdb! Создать ее довольно просто: во-первых, мы переопределяем нашу резидентную базу данных c пустым объектом JSON, который она просто сохраняет! И на этом все! Наша база данных теперь снова чиста.

Резюмирую … 🎉

Вот и все, друзья! Мы создали нашу собственную игрушечную базу данных ! 🎉🎉 На самом деле, FoobarDB — это просто демонстрационная версия базы данных. Ее можно сравнить с дешевеньким набором игрушек «Сделай сам»: вы можете улучшить ее, изменить так как захотите. Вы также можете добавить множество других функций в соответствии с вашими потребностями и требованиями к программе.

Вы можете посмотреть код на гитхабе bauripalash / foobardb

Перевод статьи: How to write a simple toy database in Python within minutes

Jupyter Notebeook и типы данных

Если вы изучаете Data Science (науку о данных), то довольно быстро встретитесь с Python. Почему? Потому что это один из самых используемых языков программирования для работы с данными. Он популярен по 3 основным причинам:

  • Его легко изучать, с ним легко работать
  • Python прекрасно работает с разными структурами данных
  • Существуют мощные библиотеки языка для визуализации данных и статистики

В этом руководстве речь пойдет обо всем, что нужно знать, начиная с основ. Даже если вы никогда не работали с кодом, то точно оказались в нужном месте. Затрагиваться будет только та часть языка, которая имеет отношение к data science — ненужные и непрактичные нюансы пропустим. А в конце обязательно создадим что-то интересное, например, прогнозную аналитику.

Это практическое руководство!

Делать что-то, следуя инструкциям, всегда полезнее, чем просто читать. Если те части, в которых есть код, вы будете повторять самостоятельно, набирая его на своем ПК, то разберетесь и запомните все в 10 раз лучше. А в конце статьи обязательно будет одно-два упражнения для проверки!

Это значит, что для практики нужна некоторая подготовка. Установите:

  • Python 3.6+
  • Jupyter (с iPython)
  • Библиотеки: pandas, numpy, scikit, matplotlib

Зачем учить Python для Data Science?

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

Конечно, хорошо бы изучить все четыре. Но если вы только начинаете, то стоит начать с одного или двух. Чаще всего рекомендуют выбирать Python и SQL. С их помощью удастся охватить 99% процесса работы с данными и аналитических проблем.

Но почему стоит изучать Python для Data Science?

  • Это легко и весело.
  • Есть много библиотек для простых аналитических проектов (например, сегментация, групповой анализ, исследовательская аналитика и так далее) и более сложных (например, построение моделей машинного обучения).
  • Рынок труда требует профессионалов в сфере работы с данными, у которых хорошие знания Python. Это значит, что Python в резюме будет чрезвычайно конкурентоспособным пунктом.

Что такое Python? Он подходит только для Data Science?

Подписывайтесь на телеграм каналы

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

  1. Python — язык общего назначения и он используется не только для Data Science. Это значит, что его не нужно знать идеально, чтобы быть экспертом в сфере работы с данными. В то же время даже основ будет достаточно, чтобы понимать и другие языки, а это очень удобно для работы в IT.
  2. Python — высокоуровневый язык. Это значит, что в отношении процессорного времени он не самый эффективный. С другой же стороны, он был создан очень простым, «удобным для использования» и понятным. Так, пусть вы и проиграете в процессорном времени, но сможете отыграться в процессе разработки.

Python 2 vs Python 3 – какой выбрать для Data Science?

Многие слышали о противостоянии Python 2.x и Python 3.x. Суть его в том, что Python 3 существует с 2008 года, и 95% функций и библиотек для data science уже перекочевали из Python 2. Также Python 2 перестанет поддерживаться после 2020 года. Учить его — то же самое, что учить латынь — иногда полезно, но будущее все равно за Python 3.

По этой причине все эти руководства написаны на Python 3.

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

Достаточно теории! Пора программировать!

Как открыть Jupyter Notebook

Когда Jupyter Notebook установлен, следуйте этим 4 шагам каждый раз, когда нужно будет его запустить:

Есть вы работаете локально, достаточно запустить программу Jupyter Notebook и перейти к пункту 4.

  1. Войти на сервер! Для этого нужно открыть терминал и ввести следующее в командную строку: ssh [ваш_логин]@[ваш ip-адрес]
    и пароль.
    (Например: ssh [email protected])
  1. Запустить Jupyter Notebeook на сервере с помощью команды: jupyter notebook --browser any
  1. Получить доступ к Jupyter из браузера! Для этого нужно открыть Google Chrome (или любой другой) и ввести следующее в адресную строку: [IP адрес удаленного сервера]:8888

(Например: 178.62.1.214:8888)

На экране отобразится следующее:

Нужно будет ввести “password” (пароль) или “token” (токен). Поскольку пароля пока нет, сначала нужно использовать токен, который можно найти в окне терминала:

  1. Готово! Теперь нужно создать новый Jupyter Notebook! (Если он создан, осталось его открыть).

Важно! Во время работы в браузере окно терминал сдолжен работать в фоне. Если его закрыть, Jupyter в браузере тоже закроется.

Вот и все. Запомните порядок действий, потому что их придется повторять часто в этом руководстве по Python для Data Science.

Как использовать Jupyter Notebeook

Теперь разберем, как пользоваться Jupyter Notebook!

  1. Введите команду Python! Это может быть команда на несколько строк — если нажать Enter, ничего не запустится, а в этой же ячейке появится новая строка!
  1. Для запуска команды Python нужно нажать SHIFT + ENTER!
  1. Введите что-то и нажмите TAB. Если это возможно, Jupyter автоматически закончит выражение (для команд Python и указанных переменных). Если вариантов несколько, появится выпадающее меню.

Основы Python

Прекрасно! Вы знаете все, что может понадобиться с технической стороны. Дальше речь пойдет об основных концепциях, которые нужно изучить, прежде чем переходить к использованию Python в Data Science. Вот эти 6 концепций:

  1. Переменные и типы данных
  2. Структуры данных в Python
  3. Функции и методы
  4. Инструкция (оператор) if
  5. Циклы
  6. Основы синтаксиса Python

Чтобы упростить процесс изучения и практики, эти 6 тем разбиты на 6 статей. Вот первая.

Основы Python №1: переменные и типы данных

В Python значения присваиваются переменным. Почему? Потому что это улучшает код — делает его более гибким, понятным и позволяет легко использовать повторно. В то же время «концепция присваивания» является одной из самых сложных в программировании. Когда код ссылается на элемент, который в свою очередь ссылается на другой элемент… это непросто. Но как только привыкаете, это начинает нравиться!

Посмотрим, как это работает!

Предположим, что есть собака (“Freddie”), и нужно сохранить ее черты (name, age, is_vaccinated, birth_year и так далее) в переменных Python. В ячейке Jupyter Notebook нужно ввести следующее:

dog_name = 'Freddie'
age = 9
is_vaccinated = True
height = 1.1
birth_year = 2001

Примечание: это же можно сделать по одной переменной для каждой ячейки. Но такое решение все-в-одном проще и изящнее.

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

Как и в SQL в Python есть несколько типов данных.

Например, переменная dog_name хранит строку: 'Freddie'. В Python 3 строка — это последовательность символов в кодировке Unicode (например, цифры, буквы, знаки препинания и так далее), поэтому она может содержать цифры, знаки восклицания и почти все что угодно (например, ‘R2-D2’ — допустимая строка). В Python легко определить строку — она записывается в кавычках.

age и birth_year хранят целые числа (9 и 2001) — это числовой тип данных Python. Другой тип данных — числа с плавающей точкой (float). В примере это height со значением 1.1.

Значение True переменной is_vaccinated — это логический тип (или булевый тип). В этом типе есть только два значения: True и False.

Резюме в таблице:

Имя переменнойЗначениеТип данных
dog_name'Freddie'str (сокр. от ‘string’ — строка)
age9int (сокр. от ‘integer’ — целое число)
is_vaccinatedTruebool (сокр. от Boolean — булев тип)
height1.1float (сокр. от floating — с плавающей запятой)
birth_year2001int (сокр. от integer)

Есть и другие типы данных, но для начала этих четырех будет достаточно.

Важно знать, что любую переменную Python можно перезаписать. Например, если запустить:

_dog_name = 'Eddie'

в Jupyter Notebook, тогда имя пса больше не будет ‘Freddie’…

Переменные Python — основные операторы

Вы знаете, что такое переменные. Пора поэкспериментировать с ними! Определим две переменные: a и b:

a = 3
b = 4

Что можно сделать с a и b? В первую очередь, есть набор арифметических операций! Ничего необычного, но вот список:

ОператорЧто делает?Результат
a + bСкладывает a и b7
a - bВычитает b из a-1
a * bУмножает a на b12
a / bДелит a на b0.75
b % aДелит b на a и возвращает остаток1
a ** bВозводит a в степень b81

Вот как это выглядит в Jupyter:

Примечание: попробуйте самостоятельно со своими переменными в Jupyter Notebook.

Можно использовать переменные с операторами сравнения. Результатом всегда будут логические True или False. a и b все еще 3 и 4.

ОператорЧто делает?Результат
a > bОценивает, больше ли a чем bFalse
a < bОценивает, меньше ли a чем bTrue
a == bОценивает, равны ли a и bFalse

В Jupyter Notebook:

В итоге, переменные сами могут быть логическими операторами. Определим c и d:

c = True
d = False
ОператорЧто делает?Результат
c and dTrue, если c и dTrueFalse
c or dTrue, если c или dTrueTrue
not cПротивоположное cFalse

Это легко и, возможно, не так интересно, но все-таки: попробуйте ввести все это в Jupyter Notebook, запустите команды и начните соединять элементы — будет интереснее.

Время переходить к заданиям.

Проверьте себя №1

Вот несколько переменных:

a = 1
b = 2
c = 3
d = True
e = 'cool'

Какой тип данных вернется, и каким будет результат всей операции?

a == e or d and c > b

Примечание: сперва попробуйте ответить на этот вопрос без Python — а затем проверьте, правильно ли вы определили!

.

.

.

Ответ: это будет логический тип данных со значением True.

Почему? Потому что:

  • Значение a == e равно False, поскольку 1 не равняется ‘cool’
  • Значение d равно True по определению
  • Значение c > b равно True, потому что 3 больше 2

Таким образом, a == e or d and c > b превращается в False or True and True, что в итоге приводит к True.

Проверьте себя №2

Используйте переменные из прошлого задания:

a = 1
b = 2
c = 3
d = True
e = 'cool'

Но в этот раз попробуйте определить результат слегка измененного выражения:

not a == e or d = and not c > b

Чтобы правильно решить эту задачку, нужно знать порядок исполнения логических операторов:

  1. not
  2. and
  3. or

.

.

.

Ответ: True.

Почему? Разберем.

Пользуясь логикой прошлого задания, можно прийти к выводу, что выражение равняется: not False or True and not True.

Первым исполняется оператор not. После того как все not оценены, остается: True or True and False.

Второй шаг — определить оператор and. Переводим и получаем True or (True and False), что приводит к True or False.

И финальный шаг — or:

True or FalseTrue

Выводы

Осознали ли вы, что программировали на Python 3? Не правда ли, что было легко и весело?

Хорошие новости в том, что в остальном Python настолько же прост. Сложность появляется от объединения простых вещей… Именно поэтому так важно знать основы!

В следующей части «Python для Data Science» вы узнаете о самых важных структурах данных в Python.

MongoDB и Python

Далее мы рассмотрим, как можно работать с Python и ориентированной на документы базой данных MongoDB. Для начала необходимо загрузить с официального сайта http://www.mongodb.org/downloads проекта сам инструмент, нам нужна самая актуальная стабильная версия. Итак, скачали, распаковали, и видим такое:

.
├── bin
│   ├── bsondump
│   ├── mongo
│   ├── mongod
│   ├── mongodump
│   ├── mongoexport
│   ├── mongofiles
│   ├── mongoimport
│   ├── mongorestore
│   ├── mongos
│   ├── mongosniff
│   └── mongostat
├── GNU-AGPL-3.0
├── README
└── THIRD-PARTY-NOTICES

Стартуем сервер базы данных mogod и получаем такое уведомление:

exception in initAndListen std::exception: dbpath (/data/db/) does not exist, terminating

Для того, чтобы сервер нормально работал нам нужен каталог, по стандартным настройкам указан /data/db. Чтобы указать свой воспользуемся ключом – dbpath:

bin/mongod --dbpath /home/toly/db

Далее нужно скачать и установить библиотеку Python ползволяющую работать с MongoDB:

git clone git://github.com/mongodb/mongo-python-driver.git pymongo
cd pymongo
sudo ./setup.py install

Прежде чем приводить пример комментированного кода разъясню как организованы данные в MongoDB. Один сервер может содержать сразу несколько БД. В базу мы можем помещать сразу несколько сборок документов. Если сравнивать с привычной MySQL, то это похоже на таблицы. В коллекциях размещены документы. А сам документ это сериализированные данные представленные в JSON формате. К примеру, если у нас имеется документ из картотеки персонала, то он будет иметь следующий вид:

{"Фамилия":"Петров",
    "Имя": "Петр",
    "Отчество": "Петрович",
    "Адрес": {"Город": "Новосибирск",
        "Улица": "Строителей",
        "Дом": 12,
        "Квартира": 8}}

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

Теперь рассмотрим код с комментариями, в котором показано, как нужно работать с библиотекой pymongo:

# импортируем pymongo
import pymongo
 
# соединяемся с сервером базы данных 
# (по умолчанию подключение осуществляется на localhost:27017)
conn = pymongo.Connection()
 
# подключаемся к другому серверу, на другой порт
conn = pymongo.Connection('localhost', 27017)
 
# выбираем базу данных
db = conn.mydb
 
# БД можно выбрать и так
db = conn['mydb']
 
# выбираем коллекцию документов
coll = db.mycoll
 
# альтернативный выбор коллекции документов
coll = db['mycoll']
 
# осуществляем добавление документа в коллекцию,
# который содержит поля name и surname - имя и фамилия
doc = {"name":"Иван", "surname":"Иванов"}
coll.save(doc)
 
# альтернативное добавление документа
coll.save({"name":"Петр", "surname":"Петров"})
 
# выводим все документы из коллекции coll
for men in coll.find():
    print men
 
# выводим фамилии людей с именем Петр
for men in coll.find({"name": "Петр"})
    print men["surname"]
 
# подсчет количества людей с именем Петр
print coll.find({"name": "Петр"}).count()
 
# добавляем ко всем документам новое поле sex - пол
coll.update({}, {"$set":{"sex": "мужской"}})
 
# всем Петрам делаем фамилию Новосельцев и возраст 25 лет
coll.update({"name": "Петр"}, {"surname": "Новосельцев", "age": 25})
 
# увеличиваем всем Петрам возраст на 5 лет
coll.update({"name": "Петр"}, {"$inc": {"age": 5}})
 
# сбрасываем у всех документов поле name
coll.update({}, {"$unset": {"name": 1}})
 
# удаляем людей с возрастом более 20 лет
# другие условия $gt - больше, $lt - меньше, 
# $lte - меньше или равно, $gte - больше или равно, $ne - не равно
coll.remove({"age": {"$gt": 20}})
 
# удаляем все документы коллекции
coll.remove({})

Вот и все, ничего сложного вроде бы нет.

А если вам нужны биологические индикаторы, с помощь которых вы вовремя зафиксируете изменения окружающей среды, заходите на сайт http://www.ru.all.biz/indikatory-biologicheskie-bgg1041525. Здесь вы найдете различные качественные биологические индикаторы по самым доступным ценам.

10 фич для ускорения анализа данных в Python / Хабр

Источник

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

1. Профилирование Pandas Dataframe

Профилирование помогает лучше понять наши данные, и пакет Pandas Profiling создан как раз для этого. Библиотека даст возможность просто и быстро выполнить разведочный анализ Pandas Dataframe. Обычно в таких случаях в качестве первого шага используются функции df.describe() и df.info(), но они сообщают мало и плохо справляются с большими наборами данных. Одна строка кода с использованием Pandas Profiling, напротив, выведет много информации в интерактивном HTML-отчете.

Вот что вычисляется для заданного набора данных:

Статистика выводимая Pandas Profiling.

Установка
pip install pandas-profiling
или
conda install -c anaconda pandas-profiling

Использование

Давайте используем набор данных о пассажирах Титаника, чтобы продемонстрировать возможности профайлера.

# импорт необходимых пакетов
import pandas as pd
import pandas_profiling
df = pd.read_csv('titanic/train.csv')
pandas_profiling.ProfileReport(df)

Это всё что нужно для вывода результатов профилирования. Отчёт изобилует деталями, включая, где это необходимо, диаграммы.

Отчёт можно экспортировать в интерактивный HTML файл:

profile = pandas_profiling.ProfileReport(df)
profile.to_file(outputfile="Titanic data profiling.html")

Кликните здесь, чтобы посмотреть вживую.

(папка с примерами — прим. перев.)


2. Делаем графики Pandas интерактивными

У класса DataFrame в Pandas есть встроенная функция .plot(). Однако визуализация создаваемая с её помощью, не является интерактивной, что хотелось бы усовершенствовать. С другой стороны, отказываться от простоты использования функции тоже не хочется. Что если бы мы могли сделать графики Pandas интерактивными, практически не внося изменений в код? Именно это возможно с библиотекой Cufflinks.

Cufflinks связывает силу plotly с гибкостью Pandas для построения интерактивных графиков. Давайте посмотрим, как можно установить библиотеку и заставить её работать с Pandas.

Установка
pip install plotly # Plotly должен быть установлен до Cufflinks
pip install cufflinks

Использование
# импортируем Pandas 
import pandas as pd
#импортируем plotly и cufflinks в оффлайн режиме
import cufflinks as cf
import plotly.offline
cf.go_offline()
cf.set_config_file(offline=False, world_readable=True)

Время увидеть всю мощь инструмента на данных о пассажирах Титаника.

df.iplot()

df.plot() в сравнении с df.iplot()

Визуализация снизу показывает статическую диаграмму, в то время как верхняя диаграмма является интерактивной и более подробной, и всё это без каких-либо существенных изменений в синтаксисе.

Здесь можно посмотреть больше примеров.


3. Немного магии

Magic commands  — это набор удобных функций в ноутбуках Jupyter, предназначенных для решения распространенных задач стандартного анализа данных. Вы можете посмотреть все доступные функции с помощью %lsmagic.

Список всех доступных «магических» функций

Магические команды бывают двух видов: line magics, которые начинаются с единственного символа % и работают на одной строке; и cell magics, которые ассоциированы с двойным %% и работают на нескольких строках.

Давайте рассмотрим те из них, которые полезны в общих задачах анализа данных:

%pastebin загружает код в Pastebin и возвращает урл. Pastebin — это сайт, где мы можем сохранить обычный текст, например фрагмент исходного кода, чтобы затем передать ссылку на него другим. Фактически, GitHub Gist сродни Pastebin, хотя и с контролем версий.

Рассмотрим такой скрипт:

# file.py
def foo(x):
    return x

Использование %pastebin в Jupyter Notebook создаст урл на Pastebin.

Команда %matplotlib inline используется для визуализации статических графиков matplotlib в Jupyter Notebook. Замените inline на notebook, чтобы получить масштабируемые и изменяемые диаграммы. Только убедитесь, что команда добавлена перед импортом matplotlib.

%matplotlib inline в сравнении с %matplotlib notebook

Команда %run запускает скрипт внутри Jupyter Notebook.

%run file.py

%%writefile записывает содержимое ячейки в файл. Код ниже будет записан в файл с именем foo.py и сохранён в текущем каталоге.

Функция %%latex отображает содержимое ячейки как LaTeX. Это полезно для написания математических формул и уравнений в ячейке.


4. Поиск и устранение ошибок

Интерактивный отладчик также является магической командой, но я дала ему собственную категорию. Если при запуске ячейки с кодом возникает исключение, введите на новой строке команду  %debug и выполните её. Откроется интерактивная среда отладки, которая покажет место, где возникло исключение. Вы сможете проверять значения переменных и выполнять различные операции. Для выхода из отладчика нажмите клавишу q.


5. Вывод может быть красивым

Если вы хотите, чтобы ваши структуры данных выводились красиво, то pprint — ваш выбор. Это особенно полезно при печати словарей или данных JSON. Давайте рассмотрим код, который использует как print, так и pprint для вывода.


6. Выделение заметок

Мы можем использовать алерты в наших Jupyter Notebooks, чтобы выделять что-то важное. Цвет будет зависеть от типа алерта. Просто добавьте любой или все из следующих кодов в ячейку, которую хотите выделить.

  • Синий алерт: информация
<div>
<b>Tip:</b> Use blue boxes (alert-info) for tips and notes. 
If it’s a note, you don’t have to include the word “Note”.
</div>
  • Жёлтый алерт: Предупреждение
<div>
<b>Example:</b> Yellow Boxes are generally used to include additional examples or mathematical formulas.
</div>
  • Зелёный алерт: Успех
<div>
Use green box only when necessary like to display links to related content.
</div>
  • Красный алерт: Опасность
<div>
It is good to avoid red boxes but can be used to alert users to not delete some important part of code etc. 
</div>

7. Печать каждого вывода в ячейке

Рассмотрим ячейку Jupyter Notebook, содержащую такой код:

In  [1]: 10+5          
         11+6
Out [1]: 17

Это нормальное свойство ячейки, что печатается только последний вывод, а для других нам нужно добавить функцию print(). Что ж, оказывается, мы можем распечатать все выводы, добавив сверху следующий фрагмент:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

Теперь все выводы печатаются один за другим.

In  [1]: 10+5          
         11+6
         12+7
Out [1]: 15
Out [1]: 17
Out [1]: 19

Чтобы вернуться к исходной настройке:

InteractiveShell.ast_node_interactivity = "last_expr"


8. Запуск скриптов на Python с опцией ‘-i’.

Типичный способ запуска скрипта на Python из командной строки: python hello.py. Однако, если вы добавите параметр i, т.е. вызовите python -i hello.py то получите гораздо больше. Посмотрим, что же именно.

  • Во-первых, как только конец программы достигнут, Python теперь не выходит из интерпретатора. Таким образом, мы можем проверить значения переменных и правильность функций, определенных в нашей программе.
  • Во-вторых, так как мы всё ещё находимся в интерпретаторе, мы можем легко вызвать отладчик питона:
import pdb
pdb.pm()

Это приведёт нас к месту, где произошло исключение, и мы сможем продолжить работу над кодом.

Оригинальный источник фичи.


9. Автоматическое (рас)комментирование кода

Ctrl/Cmd + / автоматически комментирует выделенные строки в ячейке. Повторное нажатие комбинации раскомментирует те же строки.

(Это, кстати, верно и для других редакторов типа Pycharm или Sublime Text — прим. перев.)


10. Отмена случайных действий

Вы когда-нибудь случайно удаляли ячейку Jupyter Notebook? Если да, то вот шоткаты, которые отменят это действие.

  • В случае, если вы удалили содержимое внутри ячейки, вы можете легко восстановить его, нажав CTRL/CMD+Z
  • Если вам нужно восстановить саму удаленную ячейку — ESC+Z или EDIT > Undo Delete Cells

Вывод

В этой статье я перечислила основные советы, которые помогают мне при работе с Python и Jupyter Notebooks. Надеюсь, они помогут и вам. Счастливого кодинга!

sqlite3 — интерфейс DB-API 2.0 для баз данных SQLite — документация Python 3.9.0

Исходный код: Lib / sqlite3 /


SQLite — это библиотека C, которая предоставляет легкую дисковую базу данных, которая
не требует отдельного серверного процесса и позволяет получить доступ к базе данных
с использованием нестандартного варианта языка запросов SQL. Некоторые приложения могут использовать
SQLite для внутреннего хранения данных. Также возможно создать прототип
приложение с помощью SQLite, а затем перенесите код в большую базу данных, такую ​​как
PostgreSQL или Oracle.

Модуль sqlite3 был написан Герхардом Херингом. Он предоставляет интерфейс SQL
соответствует спецификации DB-API 2.0, описанной в PEP 249 .

Для использования модуля необходимо сначала создать объект Connection , который
представляет базу данных. Здесь данные будут храниться в
example.db файл:

 импорт sqlite3
conn = sqlite3.connect ('example.db')
 

Вы также можете указать специальное имя : memory: для создания базы данных в RAM.

Когда у вас есть Connection , вы можете создать объект Cursor
и вызовите его метод execute () для выполнения команд SQL:

 c = conn.cursor ()

# Создать таблицу
c.execute ('' 'СОЗДАТЬ ТАБЛИЦУ акции
             (текст даты, транс-текст, текст символа, реальное кол-во, реальная цена) '' ')

# Вставляем строку данных
c.execute ("ВСТАВИТЬ ЗНАЧЕНИЯ акций ('2006-01-05', 'КУПИТЬ', 'RHAT', 100,35,14)")

# Сохранить (зафиксировать) изменения
conn.commit ()

# Мы также можем закрыть соединение, если мы закончили с ним.# Просто убедитесь, что все изменения были зафиксированы, иначе они будут потеряны.
conn.close ()
 

Сохраненные данные являются постоянными и доступны в последующих сеансах:

 импорт sqlite3
conn = sqlite3.connect ('example.db')
c = conn.cursor ()
 

Обычно ваши SQL-операции должны использовать значения из переменных Python. Вы
не следует собирать ваш запрос с использованием строковых операций Python, потому что при этом
небезопасен; это делает вашу программу уязвимой для атаки SQL-инъекции
(см. https: // xkcd.com / 327 / для юмористического примера того, что может пойти не так).

Вместо этого используйте подстановку параметров DB-API. Ставить ? как заполнитель
везде, где вы хотите использовать значение, а затем укажите кортеж значений в качестве
второй аргумент метода курсора execute () . (Другая база данных
модули могут использовать другой заполнитель, например % s или : 1 .)
пример:

 # Никогда не делайте этого - небезопасно!
символ = 'RHAT'
c.execute ("ВЫБРАТЬ * ИЗ акций WHERE symbol = '% s'"% symbol)

# Сделайте это вместо
t = ('RHAT',)
c.execute ('ВЫБРАТЬ * ИЗ акций ГДЕ символ =?', t)
печать (c.fetchone ())

# Более крупный пример, который вставляет много записей за раз
Purchases = [('2006-03-28', 'КУПИТЬ', 'IBM', 1000, 45.00),
             ('2006-04-05', 'ПОКУПАТЬ', 'MSFT', 1000, 72,00),
             ('2006-04-06', 'ПРОДАВАТЬ', 'IBM', 500, 53.00),
            ]
c.executemany ('INSERT INTO Stocks VALUES (?,?,?,?,?)', покупки)
 

Чтобы получить данные после выполнения оператора SELECT, вы можете обработать
курсора в качестве итератора, вызовите метод курсора fetchone () , чтобы
получить единственную совпадающую строку или вызвать fetchall () , чтобы получить список
совпадающие строки.

В этом примере используется форма итератора:

 >>> для строки в c.execute ('ВЫБРАТЬ * ИЗ запасов ПО ЗАКАЗУ ПО цене'):
        печать (строка)

('2006-01-05', 'ПОКУПАТЬ', 'RHAT', 100, 35,14)
('2006-03-28', 'ПОКУПАТЬ', 'IBM', 1000, 45.0)
('2006-04-06', 'ПРОДАВАТЬ', 'IBM', 500, 53.0)
('2006-04-05', 'ПОКУПАТЬ', 'MSFT', 1000, 72,0)
 

Функции и константы модуля

sqlite3. версия

Номер версии этого модуля в виде строки.Это не версия
библиотека SQLite.

sqlite3. информация_версии

Номер версии этого модуля в виде кортежа целых чисел. Это не
версия библиотеки SQLite.

sqlite3. sqlite_version

Номер версии библиотеки времени выполнения SQLite в виде строки.

sqlite3. sqlite_version_info

Номер версии библиотеки времени выполнения SQLite в виде кортежа целых чисел.

sqlite3. PARSE_DECLTYPES

Эта константа предназначена для использования с параметром detect_types
connect () функция.

Установка заставляет модуль sqlite3 анализировать объявленный тип для каждого
столбец, который он возвращает. Он проанализирует первое слово объявленного типа,
я. е. для «целочисленного первичного ключа» он будет разбирать «целое число» или для
«Number (10)» он будет разбирать «число».Тогда для этого столбца он будет выглядеть
в словарь конвертеров и используйте функцию конвертера, зарегистрированную для
вот типа там.

sqlite3. PARSE_COLNAMES

Эта константа предназначена для использования с параметром detect_types
connect () функция.

Установка этого параметра заставляет интерфейс SQLite анализировать имя столбца для каждого столбца, который он
возвращается. Он будет искать там строку, сформированную [mytype], а затем решать
что «mytype» — это тип столбца.Он попытается найти запись
‘Mytype’ в словаре конвертеров, а затем используйте найденную функцию конвертера
там, чтобы вернуть значение. Имя столбца находится в Cursor.description
не включает тип, т.е. е. если вы используете что-то вроде
'как «Срок годности [datetime]»'

.Базы данных

— Автостопом по Python

DB-API

API базы данных Python (DB-API) определяет стандартный интерфейс для Python.
модули доступа к базе данных. Он задокументирован в PEP 249 .
Почти все модули базы данных Python, такие как sqlite3 , psycopg и
mysql-python соответствует этому интерфейсу.

Учебные пособия, объясняющие, как работать с модулями, соответствующими этому интерфейсу, можно найти
здесь и
Вот.

SQLAlchemy

SQLAlchemy — широко используемый набор инструментов для баз данных.В отличие от многих библиотек баз данных он предоставляет не только уровень ORM, но и
обобщенный API для написания независимого от базы данных кода без SQL.

Записи

Records — минималистичная библиотека SQL,
предназначен для отправки сырых SQL-запросов в различные базы данных. Данные можно использовать
программно или экспортируется в ряд полезных форматов данных.

Также включен инструмент командной строки для экспорта данных SQL.

PugSQL

PugSQL — это простой интерфейс Python для организации
и используя параметризованный рукописный SQL.Это анти-ORM, который
философски лоу-фай, но он по-прежнему представляет собой чистый интерфейс на Python.

Джанго ORM

Django ORM — это интерфейс, используемый Django.
для обеспечения доступа к базе данных.

Он основан на идее
модели
абстракция, которая упрощает манипулирование данными в Python.

Основы:

  • Каждая модель представляет собой класс Python, являющийся подклассом django.db.models.Model.
  • Каждый атрибут модели представляет поле базы данных.
  • Django предоставляет автоматически сгенерированный API доступа к базе данных; видеть
    Делать запросы.

ребенок

peewee — еще один ORM с фокусом
на то, чтобы быть легковесным с поддержкой Python 2.6+ и 3.2+, который поддерживает
SQLite, MySQL и PostgreSQL по умолчанию. В
слой модели
похож на ORM Django и имеет
SQL-подобные методы
для запроса данных. Хотя SQLite, MySQL и PostgreSQL поддерживаются «из коробки»,
есть коллекция дополнений
доступный.

PonyORM

PonyORM — это ORM, использующий другой подход к
запрос к базе данных.Вместо написания SQL-подобного языка или логического
выражений используется синтаксис генератора Python. Также есть графический
редактор схемы, который может генерировать для вас сущности PonyORM. Он поддерживает Python
2.6+ и Python 3.3+ и может подключаться к SQLite, MySQL, PostgreSQL и Oracle.

SQLObject

SQLObject — это еще один ORM. Он поддерживает широкий
множество баз данных: обычные системы баз данных, такие как MySQL, PostgreSQL и SQLite, и
более экзотические системы, такие как SAP DB, SyBase и Microsoft SQL Server.Он поддерживает только Python 2
от Python 2.6 и выше.

.

Краткое руководство: создание приложения Python с использованием учетной записи API SQL для Azure Cosmos DB

  • 10 минут на чтение

В этой статье

В этом кратком руководстве вы создадите учетную запись SQL API Azure Cosmos DB и управляете ею с портала Azure и из Visual Studio Code с помощью приложения Python, клонированного из GitHub.Azure Cosmos DB — это многомодельная служба баз данных, которая позволяет быстро создавать и запрашивать базы данных документов, таблиц, пар «ключ-значение» и графов с возможностями глобального распределения и горизонтального масштабирования.

Предварительные требования

Создать учетную запись в базе данных

  1. В меню портала Azure или на домашней странице выберите Создать ресурс .

  2. На странице Новый найдите и выберите Azure Cosmos DB .

  3. На странице Azure Cosmos DB выберите Создать .

  4. На странице Создание учетной записи Azure Cosmos DB введите базовые параметры для новой учетной записи Azure Cosmos.

    Настройка Значение Описание
    Подписка Название подписки Выберите подписку Azure, которую вы хотите использовать для этой учетной записи Azure Cosmos.
    Группа ресурсов Имя группы ресурсов Выберите группу ресурсов или выберите Создать новый , затем введите уникальное имя для новой группы ресурсов.
    Имя учетной записи Уникальное имя Введите имя для идентификации своей учетной записи Azure Cosmos. Поскольку documents.azure.com добавляется к имени, которое вы предоставляете для создания своего URI, используйте уникальное имя.

    Имя может содержать только строчные буквы, цифры и знак дефиса (-).Он должен иметь длину от 3 до 44 символов.

    API Тип учетной записи для создания Выберите Core (SQL) для создания базы данных документов и запросов с использованием синтаксиса SQL.

    API определяет тип создаваемой учетной записи. Azure Cosmos DB предоставляет пять API-интерфейсов: Core (SQL) и MongoDB для данных документа, Gremlin для данных графа, Таблица Azure и Cassandra. В настоящее время вы должны создать отдельную учетную запись для каждого API.

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

    Примечание : бессерверная версия в настоящее время доступна только для учетных записей Core (SQL) API.

    Применить бесплатную скидку Применять или Не применять На уровне бесплатного пользования Azure Cosmos DB вы получите первые 400 RU / с и 5 ГБ хранилища бесплатно в учетной записи. Узнать больше об уровне бесплатного пользования.
    Расположение Регион, ближайший к вашим пользователям Выберите географическое расположение для размещения вашей учетной записи Azure Cosmos DB.Используйте ближайшее к пользователям расположение, чтобы предоставить им максимально быстрый доступ к данным.
    Тип счета Производство или непроизводство Выберите Производство , если учетная запись будет использоваться для производственной нагрузки. Выберите Непроизводственный , если учетная запись будет использоваться для непроизводственных целей, например разработка, тестирование, контроль качества или постановка. Это параметр тега ресурса Azure, который настраивает работу портала, но не влияет на базовую учетную запись Azure Cosmos DB.Вы можете изменить это значение в любое время.

    Примечание

    У вас может быть до одной учетной записи Azure Cosmos DB уровня бесплатного пользования для каждой подписки Azure, и вы должны согласиться при создании учетной записи. Если вы не видите возможность применить скидку уровня бесплатного пользования, это означает, что для другой учетной записи в подписке уже включен уровень бесплатного пользования.

    Примечание

    Следующие параметры недоступны при выборе Serverless в качестве режима емкости :

    • Применить скидку уровня бесплатного
    • Гео-избыточность
    • Запись в нескольких регионах
  5. Выбрать Просмотр + создать .Вы можете пропустить разделы Network и Tags .

  6. Просмотрите настройки учетной записи, а затем выберите Создать . Создание учетной записи займет несколько минут. Подождите, пока на странице портала отобразится Развертывание завершено .

  7. Выберите Перейти к ресурсу , чтобы перейти на страницу учетной записи Azure Cosmos DB.

Добавить контейнер

Теперь вы можете использовать инструмент Data Explorer на портале Azure для создания базы данных и контейнера.

  1. Выберите Data Explorer > Новый контейнер .

    Область добавления контейнера отображается справа, вам может потребоваться прокрутить вправо, чтобы увидеть ее.

  2. На странице Добавить контейнер введите настройки для нового контейнера.

    Настройка Рекомендуемое значение Описание
    ID базы данных Задачи Введите Задачи в качестве имени новой базы данных.Имена баз данных должны содержать от 1 до 255 символов, и они не могут содержать /, \\, #,? или конечный пробел. Отметьте опцию Provision database throughput , она позволяет вам совместно использовать пропускную способность, предоставленную для базы данных, для всех контейнеров в базе данных. Этот вариант также помогает сократить расходы.
    Пропускная способность 400 Оставьте пропускную способность на уровне 400 единиц запросов в секунду (RU / s). Если вы хотите уменьшить задержку, вы можете увеличить пропускную способность позже.
    ID контейнера шт. Введите Items в качестве имени для вашего нового контейнера. К идентификаторам контейнеров предъявляются те же требования к символам, что и к именам баз данных.
    Ключ раздела / категория В примере, описанном в этой статье, в качестве ключа раздела используется / категория .

    В дополнение к предыдущим настройкам вы можете дополнительно добавить Уникальные ключи для контейнера.В этом примере оставим поле пустым. Уникальные ключи предоставляют разработчикам возможность добавить уровень целостности данных в базу данных. Создавая политику уникального ключа при создании контейнера, вы гарантируете уникальность одного или нескольких значений для каждого ключа раздела. Дополнительные сведения см. В статье Уникальные ключи в Azure Cosmos DB.

    Выбрать ОК . Обозреватель данных отображает новую базу данных и контейнер.

Добавить пример данных

Теперь вы можете добавлять данные в новый контейнер с помощью проводника данных.

  1. Из Data Explorer разверните базу данных Tasks , разверните контейнер Items . Выберите Items , а затем выберите New Item .

  2. Теперь добавьте документ в контейнер со следующей структурой.

      {
        "id": "1",
        «категория»: «личный»,
        "name": "продукты",
        "description": "Соберите яблоки и клубнику.",
        "isComplete": ложь
    }
      
  3. После добавления json на вкладку Documents выберите Save .

  4. Создайте и сохраните еще один документ, в котором вы вставляете уникальное значение для свойства id и изменяете другие свойства по своему усмотрению. Новые документы могут иметь любую структуру, поскольку Azure Cosmos DB не накладывает никаких схем на ваши данные.

Запрос данных

Вы можете использовать запросы в проводнике данных для извлечения и фильтрации данных.

  1. В верхней части вкладки Items в проводнике данных просмотрите запрос по умолчанию SELECT * FROM c .Этот запрос извлекает и отображает все документы из контейнера, упорядоченные по идентификатору.

  2. Чтобы изменить запрос, выберите Изменить фильтр , замените запрос по умолчанию на ORDER BY c._ts DESC , а затем выберите Применить фильтр .

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

Если вы знакомы с синтаксисом SQL, вы можете ввести любые поддерживаемые запросы SQL в поле предиката запроса.Вы также можете использовать Data Explorer для создания хранимых процедур, UDF и триггеров для бизнес-логики на стороне сервера.

Data Explorer обеспечивает простой доступ к порталу Azure ко всем встроенным функциям программного доступа к данным, доступным в API. Вы также используете портал для масштабирования пропускной способности, получения ключей и строк подключения, а также для просмотра показателей и соглашений об уровне обслуживания для своей учетной записи Azure Cosmos DB.

Клонировать образец приложения

Теперь давайте клонируем приложение SQL API из GitHub, установим строку подключения и запустим его.В этом кратком руководстве используется версия 4 SDK Python.

  1. Откройте командную строку, создайте новую папку с именем git-samples, затем закройте командную строку.

      мкр "git-samples"
      

    Если вы используете командную строку bash, вы должны вместо этого использовать следующую команду:

      mkdir "git-samples"
      
  2. Откройте окно терминала git, например git bash, и используйте команду cd , чтобы перейти в новую папку для установки примера приложения.

      cd "git-samples"
      
  3. Выполните следующую команду, чтобы клонировать образец репозитория. Эта команда создает копию образца приложения на вашем компьютере.

      git clone https://github.com/Azure-Samples/azure-cosmos-db-python-getting-started.git
      

Обновите строку подключения

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

  1. В своей учетной записи Azure Cosmos DB на портале Azure выберите Ключи на левой панели навигации.Используйте кнопки копирования в правой части экрана, чтобы скопировать URI и первичный ключ в файл cosmos_get_started.py на следующем шаге.

  2. В Visual Studio Code откройте файл cosmos_get_started.py в \ git-samples \ azure-cosmos-db-python-Getting-started .

  3. Скопируйте значение URI с портала (с помощью кнопки копирования) и сделайте его значением переменной конечной точки в cosmos_get_started.py .

    endpoint = 'https://FILLME.documents.azure.com',

  4. Затем скопируйте значение PRIMARY KEY с портала и сделайте его значением ключа в cosmos_get_started.py . Теперь вы обновили свое приложение, добавив в него всю информацию, необходимую для взаимодействия с Azure Cosmos DB.

    ключ = 'FILLME'

  5. Сохраните файл cosmos_get_started.py .

Посмотреть код

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

Все следующие фрагменты взяты из файла cosmos_get_started.py .

  • CosmosClient инициализирован. Обязательно обновите значения «конечной точки» и «ключа», как описано в разделе «Обновите строку подключения».

      клиент = CosmosClient (конечная точка, ключ)
      
  • Создана новая база данных.

      имя_базы_данных = 'AzureSampleFamilyDatabase'
    база данных = клиент.create_database_if_not_exists (id = имя_базы_данных)
      
  • Создан новый контейнер с выделенной пропускной способностью 400 RU / с. Мы выбираем lastName в качестве ключа раздела, что позволяет нам выполнять эффективные запросы, фильтрующие это свойство.

      container_name = 'FamilyContainer'
    контейнер = база данных.create_container_if_not_exists (
        id = имя_контейнера,
        partition_key = PartitionKey (путь = "/ lastName"),
        offer_throughput = 400
    )
      
  • Некоторые предметы добавлены в контейнер.Контейнеры — это набор элементов (документов JSON), которые могут иметь различную схему. Вспомогательные методы get_ [name] _family_item возвращают представления семейства, которые хранятся в Azure Cosmos DB в виде документов JSON.

      для family_item в family_items_to_create:
        container.create_item (body = family_item)
      
  • Считывание точек (поиск значений ключа) выполняется с использованием метода read_item . Мы распечатываем стоимость RU каждой операции.

      для семьи в family_items_to_create:
        item_response = container.read_item (item = family ['id'], partition_key = family ['lastName']))
        request_charge = container.client_connection.last_response_headers ['x-ms-request-charge']
        print ('Прочитать элемент с идентификатором {0}. Операция израсходовала {1} единицы запроса'.format (item_response [' id '], (request_charge)))
      
  • Запрос выполняется с использованием синтаксиса запроса SQL. Поскольку мы используем значения ключа раздела lastName в предложении WHERE, Azure Cosmos DB будет эффективно направлять этот запрос в соответствующие разделы, повышая производительность.

      query = "ВЫБРАТЬ * ИЗ c WHERE c.lastName IN ('Wakefield', 'Andersen')"
    
    items = список (container.query_items (
        query = запрос,
        enable_cross_partition_query = Истина
    ))
    
    request_charge = container.client_connection.last_response_headers ['x-ms-request-charge']
    
    print ('Запрос возвратил элементов: {0}. Операция потребила {1} единиц запроса'. формат (len (items), request_charge))
      

Запустите приложение

  1. В Visual Studio Code выберите View > Command Palette .

  2. В командной строке введите Python: выберите Interpreter , а затем выберите версию Python для использования.

    Нижний колонтитул в Visual Studio Code обновлен, чтобы указать выбранный интерпретатор.

  3. Выберите View > Integrated Terminal , чтобы открыть интегрированный терминал Visual Studio Code.

  4. Убедитесь, что во встроенном окне терминала вы находитесь в папке azure-cosmos-db-python-Getting-started .Если нет, выполните следующую команду, чтобы переключиться на папку с образцом.

      cd "\ git-samples \ azure-cosmos-db-python-Getting-started" `
      
  5. Выполните следующую команду, чтобы установить пакет azure-cosmos.

      pip install --pre azure-cosmos
      

    Если вы получаете сообщение об отказе в доступе при попытке установить azure-cosmos, вам необходимо запустить VS Code от имени администратора.

  6. Выполните следующую команду, чтобы запустить образец, а также создать и сохранить новые документы в Azure Cosmos DB.

      питон cosmos_get_started.py
      
  7. Чтобы убедиться, что новые элементы созданы и сохранены, на портале Azure выберите Data Explorer > AzureSampleFamilyDatabase > Items . Просмотрите созданные элементы. Например, вот образец документа JSON для семейства Андерсен:

      {
        "id": "Андерсен-1569479288379",
        "lastName": "Андерсен",
        "район": "WA5",
        "родители": [
            {
                "familyName": нуль,
                "firstName": "Томас"
            },
            {
                "familyName": нуль,
                "firstName": "Мэри Кей"
            }
        ],
        "дети": ноль,
        "адрес": {
            "состояние": "WA",
            "county": "Король",
            "город": "Сиэтл"
        },
        "зарегистрировано": правда,
        "_rid": "8K5qAIYtZXeBhB4AAAAAAA ==",
        "_self": "dbs / 8K5qAA == / colls / 8K5qAIYtZXc = / docs / 8K5qAIYtZXeBhB4AAAAAAA == /",
        "_etag": "\" a3004d78-0000-0800-0000-5d8c5a780000 \ "",
        "_attachments": "вложения /",
        "_ts": 1569479288
    }
      

Обзор SLA на портале Azure

Портал Azure отслеживает пропускную способность, хранилище, доступность, задержку и согласованность вашей учетной записи Cosmos DB.Диаграммы для показателей, связанных с соглашением об уровне обслуживания (SLA) Azure Cosmos DB, показывают значение SLA по сравнению с фактической производительностью. Этот набор показателей делает прозрачным мониторинг ваших соглашений об уровне обслуживания.

Для просмотра показателей и SLA:

  1. Выберите Metrics в меню навигации своей учетной записи Cosmos DB.

  2. Выберите вкладку, например Задержка , и выберите временной интервал справа. Сравните линии Actual и SLA на диаграммах.

  3. Просмотрите показатели на других вкладках.

Очистить ресурсы

Когда вы закончите работу со своим приложением и учетной записью Azure Cosmos DB, вы можете удалить созданные ресурсы Azure, чтобы не взимать дополнительную плату. Для удаления ресурсов:

  1. На панели поиска портала Azure найдите и выберите Группы ресурсов .

  2. Из списка выберите группу ресурсов, которую вы создали для этого краткого руководства.

  3. На странице группы ресурсов Обзор выберите Удалить группу ресурсов .

  4. В следующем окне введите имя удаляемой группы ресурсов, а затем выберите Удалить .

Следующие шаги

В этом кратком руководстве вы узнали, как создать учетную запись Azure Cosmos DB, создать контейнер с помощью проводника данных и запустить приложение Python в Visual Studio Code.Теперь вы можете импортировать дополнительные данные в свою учетную запись Azure Cosmos DB.

.

API, пакет SDK и ресурсы для SQL Python для Azure Cosmos DB

  • 11 минут на чтение

В этой статье

История выпусков

4.1.0 (2020-08-10)

  • Добавлено предупреждение об устаревании для «ленивого» режима индексирования. Бэкэнд больше не позволяет создавать контейнеры в этом режиме, а вместо этого устанавливает их согласованность.

Новые функции

  • Добавлена ​​возможность задавать TTL аналитического хранилища при создании нового контейнера.

Исправления ошибок

  • Исправлена ​​поддержка dicts в качестве входных данных для API get_client.
  • Исправлена ​​совместимость Python 2/3 в итераторах запросов.
  • Ошибка подсказки фиксированного типа (ошибка № 12570).
  • Исправлена ​​ошибка, из-за которой заголовки параметров не добавлялись в функцию upsert_item. Выпуск №11791 — спасибо @aalapatirvbd.
  • Исправлена ​​ошибка, возникавшая при использовании в элементе нестрокового идентификатора. Теперь он вызывает TypeError, а не AttributeError (Issue # 11793).

4.0.0

  • Стабильный выпуск.
  • Добавлен HttpLoggingPolicy в конвейер, чтобы разрешить передачу настраиваемого средства ведения журнала для заголовков запросов и ответов.

4.0.0b6

  • Исправлена ​​ошибка в synchronized_request для медиа-API.
  • Удалены MediaReadMode и MediaRequestTimeout из ConnectionPolicy, поскольку медиа-запросы не поддерживаются.

4.0.0b5

  • Модуль azure.cosmos.errors устарел и заменен на azure.cosmos.exceptions

  • Параметры условия доступа ( access_condition , if_match , if_none_match ) устарели и заменены отдельными параметрами match_condition и etag .

  • Исправлена ​​ошибка в провайдере карты маршрутизации.

  • Добавлена ​​поддержка запросов Distinct, Offset и Limit.

  • Контекст выполнения запроса документа по умолчанию теперь используется для

    • Запросы ChangeFeed
    • однораздельных запросов (partitionkey, partitionKeyRangeId присутствует в опциях)
    • Бездокументарные запросы
  • Ошибки для агрегатов в нескольких разделах, при разрешении запроса между разделами установлено значение true, но ключевое слово «значение» отсутствует

  • Обращается к конечной точке плана запроса для других сценариев для получения плана запроса

  • Добавлена ​​поддержка __repr__ для объектов сущностей Cosmos.

  • Обновленная документация.

4.0.0b4

  • Добавлена ​​поддержка аргумента ключевого слова timeout для всех операций, чтобы указать абсолютное время ожидания в секундах, в течение которого операция должна быть завершена. Если значение тайм-аута превышено, будет выдано azure.cosmos.errors.CosmosClientTimeoutError .

  • Добавлен новый ConnectionRetryPolicy для управления поведением повторных попыток при ошибках HTTP-соединения.

  • Добавлен новый конструктор и аргументы ключевого слова конфигурации для каждой операции:

    • retry_total — Максимальное количество попыток повтора.
    • retry_backoff_max — Максимальное время ожидания повтора в секундах.
    • retry_fixed_interval — Фиксированный интервал повтора в миллисекундах.
    • retry_read — Максимальное количество попыток повторения чтения сокетов.
    • retry_connect — максимальное количество попыток повторения ошибки подключения.
    • retry_status — Максимальное количество повторных попыток для кодов состояния ошибки.
    • retry_on_status_codes — список конкретных кодов состояния для повторной попытки.
    • retry_backoff_factor — Фактор для расчета времени ожидания между попытками повтора.

4.0.0b3

  • Добавлены create_database_if_not_exists () и create_container_if_not_exists функциональные возможности в CosmosClient и Database соответственно.

4.0.0b2

  • Версия 4.0.0b2 — это вторая итерация в наших усилиях по созданию клиентской библиотеки, которая соответствует лучшим практикам языка Python.

Критические изменения

  • Клиентское соединение адаптировано для использования конвейера HTTP, определенного в azure.core.pipeline .

  • Интерактивные объекты теперь переименованы в прокси. Сюда входят:

    • База данных -> DatabaseProxy
    • Пользователь -> UserProxy
    • Контейнер -> ContainerProxy
    • Скрипты -> СкриптыПрокси
  • Обновлен конструктор CosmosClient :

    • Параметр auth был переименован в учетные данные и теперь принимает тип аутентификации напрямую.Это означает, что можно передать значение первичного ключа, словарь маркеров ресурсов или список разрешений. Однако старый формат словаря все еще поддерживается.

    • Параметр connection_policy был сделан параметром, содержащим только ключевое слово, и, хотя он все еще поддерживается, каждый из отдельных атрибутов политики теперь может быть передан как явные аргументы ключевого слова:

      • request_timeout
      • media_request_timeout
      • connection_mode
      • media_read_mode
      • proxy_config
      • enable_endpoint_discovery
      • предпочтительное_ расположение
      • multiple_write_locations
  • В CosmosClient добавлен новый конструктор, позволяющий создавать с помощью строки подключения, полученной с портала Azure.

  • Некоторые операции read_all были переименованы в список операций:

    • CosmosClient.read_all_databases -> CosmosClient.list_databases
    • Container.read_all_conflicts -> ContainerProxy.list_conflicts
    • Database.read_all_containers -> DatabaseProxy.list_containers
    • Database.read_all_users -> DatabaseProxy.list_users
    • User.read_all_permissions -> UserProxy.list_permissions
  • Все операции, которые принимают request_options или feed_options параметров, они были перемещены в параметры только по ключевым словам. Кроме того, хотя эти словари параметров все еще поддерживаются, каждая из отдельных параметров в словаре теперь поддерживается как явные аргументы ключевого слова.

  • Иерархия ошибок теперь унаследована от azure.core.AzureError :

    • HTTPFailure переименован в CosmosHttpResponseError
    • JSONParseFailure был удален и заменен на azure.core.DecodeError
    • Добавлены дополнительные ошибки для определенных кодов ответов:
      • CosmosResourceNotFoundError для статуса 404
      • CosmosResourceExistsError для статуса 409
      • CosmosAccessConditionFailedError для статуса 412
  • CosmosClient теперь можно запустить в диспетчере контекста для обработки закрытия клиентского соединения.

  • Итерируемые ответы (например, ответы на запросы и ответы списка) теперь имеют тип azure.core.paging.ItemPaged . Метод fetch_next_block был заменен вторичным итератором, доступ к которому осуществляется методом by_page .

4.0.0b1

Version 4.0.0b1 — это первая предварительная версия наших усилий по созданию удобной клиентской библиотеки, которая соответствует лучшим практикам языка Python. Дополнительные сведения об этом и предварительные версии других библиотек пакета SDK для Azure см. На странице https: // aka.ms / azure-sdk-preview1-python.

Критические изменения: новый дизайн API

  • Операции теперь привязаны к конкретному клиенту:

    • CosmosClient : этот клиент обрабатывает операции на уровне учетной записи. Это включает в себя управление свойствами службы и перечисление баз данных в учетной записи.

    • База данных : этот клиент обрабатывает операции на уровне базы данных. Это включает создание и удаление контейнеров, пользователей и хранимых процедур.Доступ к нему можно получить из экземпляра cosmosClient по имени.

    • Контейнер : этот клиент обрабатывает операции для определенного контейнера. Это включает запросы и вставку элементов, а также управление свойствами.

    • Пользователь : этот клиент обрабатывает операции для определенного пользователя. Это включает добавление и удаление разрешений и управление свойствами пользователя.

      К этим клиентам можно получить доступ, перемещаясь вниз по иерархии клиентов с помощью метода get_ _client .Полную информацию о новом API см. В справочной документации.

  • Доступ к клиентам осуществляется по имени, а не по идентификатору. Нет необходимости объединять строки для создания ссылок.

  • Больше нет необходимости импортировать типы и методы из отдельных модулей. Общедоступная поверхностная область API доступна непосредственно в пакете azure.cosmos .

  • Отдельные свойства запроса могут быть предоставлены в виде аргументов ключевого слова, вместо создания отдельного экземпляра RequestOptions .

3.0.2

  • Добавлена ​​поддержка MultiPolygon Datatype
  • Исправление ошибки в политике повторных попыток чтения сеанса
  • Исправление ошибок неправильного заполнения при декодировании строк с базой 64

3.0.1

  • Исправление ошибки в LocationCache
  • Исправление ошибки, логика повторной попытки конечной точки
  • Фиксированная документация

3.0.0

  • Добавлена ​​поддержка записи в нескольких регионах
  • Изменения наименования
    • DocumentClient для CosmosClient
    • Сбор в контейнер
    • Документ к позиции
    • Название пакета обновлено до «лазурь-космос»
    • Пространство имен изменено на «лазурный.космос »

2.3.3

  • Добавлена ​​поддержка прокси
  • Добавлена ​​поддержка чтения ленты изменений
  • Добавлена ​​поддержка заголовков квот сбора
  • Исправление ошибки при выдаче больших токенов сеанса
  • Исправление ошибки для ReadMedia API
  • Исправление ошибки в кэше диапазона ключей раздела

2.3.2

  • Добавлена ​​поддержка повторных попыток по умолчанию при проблемах с подключением.

2.3.1

  • Обновленная документация для ссылки на Azure Cosmos DB вместо Azure DocumentDB.

2.3.0

2.2.1

  • исправление для агрегированного dict
  • Исправление

  • для обрезки слэшей в ссылке ресурса
  • тестов на кодировку юникода

2.2.0

  • Добавлена ​​поддержка функции запроса единиц в минуту (RU / m).
  • Добавлена ​​поддержка нового уровня согласованности, называемого ConsistentPrefix.

2.1.0

  • Добавлена ​​поддержка запросов агрегирования (COUNT, MIN, MAX, SUM и AVG).
  • Добавлен параметр для отключения проверки SSL при работе с эмулятором DocumentDB.
  • Убрано ограничение модуля зависимых запросов до 2.10.0.
  • Снижена минимальная пропускная способность для секционированных коллекций с 10 100 RU / с до 2500 RU / s.
  • Добавлена ​​поддержка включения ведения журнала сценария во время выполнения хранимой процедуры.
  • Версия REST API в этом выпуске увеличена до «2017-01-19».

2.0.1

  • Внесены редакционные правки в комментарии к документации.

2.0.0

  • Добавлена ​​поддержка Python 3.5.
  • Добавлена ​​поддержка пула соединений с использованием модуля запросов.
  • Добавлена ​​поддержка согласованности сеанса.
  • Добавлена ​​поддержка запросов TOP / ORDERBY для секционированных коллекций.

1.9.0

  • Добавлена ​​поддержка политики повтора для регулируемых запросов. (Регулируемые запросы получают исключение со слишком большой частотой запросов, код ошибки 429.)
    По умолчанию DocumentDB повторяет девять попыток для каждого запроса при обнаружении кода ошибки 429, учитывая время retryAfter в заголовке ответа.Фиксированное время интервала повтора теперь можно установить как часть свойства RetryOptions объекта ConnectionPolicy, если вы хотите игнорировать время retryAfter, возвращаемое сервером между повторами.
    DocumentDB теперь ожидает максимум 30 секунд для каждого регулируемого запроса (независимо от количества повторных попыток) и возвращает ответ с кодом ошибки 429.
    Это время также можно переопределить в свойстве RetryOptions объекта ConnectionPolicy.

  • DocumentDB теперь возвращает x-ms-throttle-retry-count и x-ms-throttle-retry-wait-time-ms в качестве заголовков ответа в каждом запросе, чтобы обозначить счетчик повторов газа.
    и совокупное время ожидания запроса между повторными попытками.

  • Удален класс RetryPolicy и соответствующее свойство (retry_policy), представленное в классе document_client, и вместо этого добавлен класс RetryOptions
    предоставление свойства RetryOptions в классе ConnectionPolicy, которое можно использовать для переопределения некоторых параметров повтора по умолчанию.

1.8.0

  • Добавлена ​​поддержка учетных записей базы данных с георепликацией.
  • Тестовые исправления для перемещения глобального хоста и masterKey в отдельные тестовые классы.

1,7,0

  • Добавлена ​​поддержка функции «Время жизни» (TTL) для документов.

1.6.1

  • Исправлены ошибки, связанные с разделением на стороне сервера, позволяющие использовать специальные символы в пути ключа раздела.

1.6.0

  • Добавлена ​​поддержка секционированных коллекций на стороне сервера.

1.5.0

  • В SDK добавлена ​​платформа сегментирования на стороне клиента. Реализованы классы HashPartionResolver и RangePartitionResolver.

1.4.2

  • Реализовать Upsert. Добавлены новые методы UpsertXXX для поддержки функции Upsert.
  • Внедрение маршрутизации на основе идентификаторов. Никаких публичных изменений API, все изменения внутренние.

1.3.0

  • Выпуск пропущен, чтобы привести номер версии в соответствие с другими SDK

1.2.0

  • Поддерживает индекс GeoSpatial.
  • Проверяет свойство ID для всех ресурсов. Идентификаторы ресурсов не могут содержать ?, /, #, \\ символов или заканчиваться пробелом.
  • Добавляет новый заголовок «Ход преобразования индекса» в ResourceResponse.

1.1.0

  • Реализует политику индексирования V2

1.0.1

  • Поддерживает прокси-соединение

Даты выхода на пенсию

Microsoft предоставляет уведомление по крайней мере за 12 месяцев до прекращения поддержки SDK, чтобы облегчить переход на более новую / поддерживаемую версию. Новые функции, функции и оптимизации добавляются только в текущий SDK, поэтому рекомендуется всегда обновляться до последней версии SDK как можно раньше.

Предупреждение

После 31 августа 2022 года Azure Cosmos DB больше не будет исправлять ошибки, добавлять новые функции и обеспечивать поддержку версий 1.x или 2.x пакета SDK Python для Azure Cosmos DB для SQL API. Если вы предпочитаете не обновляться, запросы, отправленные из версии 1.x и 2.x пакета SDK, будут продолжать обслуживаться службой Azure Cosmos DB.

Версия Дата выпуска Дата выхода на пенсию
4,0.0 20 мая 2020
3.0.2 15 нояб.2018 г.
3.0.1 4 октября 2018 г.
2.3.3 8 сентября 2018 г. 30 августа 2020
2.3.2 8 мая 2018 30 августа 2020
2.3.1 21 декабря 2017 30 августа 2020
2.3,0 10 ноября 2017 30 августа 2020
2.2.1 29 сен.2017 30 августа 2020
2.2.0 10 мая 2017 30 августа 2020
2.1.0 01 мая 2017 30 августа 2020
2.0.1 30 октября 2016 30 августа 2020
2.0.0 29 сентября 2016 30 августа 2020
1.9,0 07 июля 2016 30 августа 2020
1.8.0 14 июня 2016 30 августа 2020
1.7.0 26 апреля 2016 30 августа 2020
1.6.1 8 апреля 2016 30 августа 2020
1.6.0 29 марта 2016 30 августа 2020
1.5.0 3 января 2016 30 августа 2020
1.4,2 6 октября 2015 30 августа 2020
1.4.1 6 октября 2015 30 августа 2020
1.2.0 6 августа 2015 30 августа 2020
1.1.0 09 июля 2015 30 августа 2020
1.0.1 25 мая 2015 30 августа 2020
1.0.0 7 апреля 2015 30 августа 2020
0.9.4-предварительная версия 14 января 2015 29 февраля 2016
0.9.3-предварительная версия 09 декабря 2014 29 февраля 2016
0.9.2-предварительная версия 25 ноября 2014 29 февраля 2016
0.9.1-предварительная версия 23 сентября 2014 29 февраля 2016
0.9.0-предварительная версия 21 августа 2014 29 февраля 2016

FAQ

Как я узнаю о прекращении поддержки SDK?

Microsoft предоставит предварительное уведомление за 12 месяцев до окончания поддержки прекращающего использования SDK, чтобы облегчить плавный переход на поддерживаемый SDK.Мы будем уведомлять вас по различным каналам связи: портал Azure, обновления Azure и прямая связь с назначенными администраторами служб.

Могу ли я разрабатывать приложения с помощью пакета SDK для Azure Cosmos DB, который будет удален из эксплуатации, в течение 12-месячного периода?

Да, вы сможете создавать, развертывать и изменять приложения с помощью пакета SDK для Azure Cosmos DB, который будет удален, в течение 12-месячного периода уведомления. Мы рекомендуем при необходимости перейти на более новую поддерживаемую версию пакета SDK для Azure Cosmos DB в течение 12-месячного периода уведомления.

Что произойдет с приложениями, использующими неподдерживаемый пакет SDK для Azure Cosmos DB после даты вывода из эксплуатации?

После даты вывода из эксплуатации Azure Cosmos DB больше не будет исправлять ошибки, добавлять новые функции и поддерживать устаревшие версии SDK. Если вы предпочитаете не обновляться, запросы, отправленные из устаревших версий SDK, по-прежнему будут обслуживаться службой Azure Cosmos DB.

Какие версии SDK будут содержать последние функции и обновления?

Новые функции и обновления будут добавлены только в последнюю дополнительную версию последней поддерживаемой основной версии SDK.Мы рекомендуем всегда использовать последнюю версию, чтобы воспользоваться новыми функциями, улучшениями производительности и исправлениями ошибок. Если вы используете старую, не вышедшую из эксплуатации версию SDK, ваши запросы к Azure Cosmos DB по-прежнему будут работать, но у вас не будет доступа к каким-либо новым возможностям.

Что мне делать, если я не могу обновить свое приложение до истечения срока?

Мы рекомендуем как можно раньше выполнить обновление до последней версии SDK. После того, как SDK помечен для вывода из эксплуатации, у вас будет 12 месяцев на обновление приложения.Если вы не можете выполнить обновление до даты выхода из эксплуатации, запросы, отправленные из устаревших версий пакета SDK, будут по-прежнему обслуживаться Azure Cosmos DB, поэтому ваши запущенные приложения будут продолжать работать. Но Azure Cosmos DB больше не будет исправлять ошибки, добавлять новые функции и поддерживать устаревшие версии SDK.

Если у вас есть план поддержки и вам требуется техническая поддержка, свяжитесь с нами, заполнив заявку в службу поддержки.

Следующие шаги

Дополнительные сведения о Cosmos DB см. На странице службы Microsoft Azure Cosmos DB.

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *