Psycopg2

Psycopg2 Учебник

Psycopg2 Учебник

Учебное пособие по Python, PostgreSQL и Psycopg2

Чтобы разработать приложение, выходящее за рамки простого сценария, необходимо сохранить данные вне памяти в базе данных.  Есть много возможных вариантов для базы данных, но PostgreSQL - это надежная платформа с открытым исходным кодом, которую можно легко масштабировать для производства.

Python и PostgreSQL могут быть объединены для быстрой разработки мощных приложений.  Psycopg - это адаптер PostgreSQL, который можно использовать для использования PostgreSQL через библиотеку на основе Python.  В этом руководстве будет рассмотрена установка Psycopg2 и некоторого кода Python, чтобы продемонстрировать его использование.

Вы можете установить Psycopg2 с помощью следующей команды терминала pip.

$ pip install psycopg2

При установке вы должны увидеть вывод терминала ниже.

Сбор psycopg2
Скачивание psycopg2-2.7.3.2-cp27-cp27m-
macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10
_10_x86_64.whl (1.7 МБ)
100% | ███████████████████████████████ | 1.7 МБ 397 КБ / с
Установка собранных пакетов: psycopg2
Успешно установлен psycopg2-2.7.3.2
Брэдли-Мини: ~ БрэдлиПэттон $

Чтобы импортировать пакет Psycopg2 в свое приложение Python, используйте следующую строку кода.

импорт psycopg2

Чтобы получить данные для загрузки в нашу базу данных, я позаимствовал код из предыдущего руководства по pandas. Приведенный ниже код создаст pandas DataFrame с историческими данными.  Затем это будет использовано для создания таблицы в таблице PostgreSQL.

def get_data (символы, начальная_дата, конечная_дата):
панель = данные.DataReader (символы, "yahoo", начальная_дата, конечная_дата)
df = панель ["Закрыть"]
df.columns = map (str.нижний, df.столбцы)
hd = список (df)
печать df.глава()
печать HD
return df

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

def tutorial_run ():
символы = ['SPY', 'AAPL', 'GOOG']
df = get_data (символы, '2006-01-03', '2017-12-31')
если __name__ == "__main__":
tutorial_run ()

Чтобы подключиться к базе данных PostgreSQL, нам нужно будет добавить следующий метод. Try \ Except обеспечивает некоторую обработку ошибок в случае, если локальная база данных не запущена или в базу данных передаются неверные параметры подключения. Метод подключения в библиотеке Psycopg2 подключается к базе данных с параметрами, переданными в строке подключения. Ваши параметры для dbname, user и password могут отличаться. Если соединение по какой-либо причине не удается, в консоль будет записано сообщение об ошибке. Этот метод возвращает объект подключения обратно нашему методу вызова, где его можно использовать для дальнейших операций с базой данных.

def connect ():
cons = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
пытаться:
conn = psycopg2.подключить (минусы)
печать "Подключено"
Кроме:
печать "Я не могу подключиться к базе данных"
return conn

После того, как мы установили соединение с базой данных PostgreSQL, мы можем загрузить наши данные из метода get_data () в нашу базу данных. Psycopg2 и pandas делают этот процесс очень простым.

Первая строка определяет метод, который pandas должен использовать для подключения к базе данных, чтобы скопировать DataFrame. Вы предоставите те же параметры, что и ваш метод подключения. Вторая строка кода сохраняет DataFrame в базе данных PostgreSQL с помощью метода to_sql ().

def create_table (таблица, df):
engine = create_engine ('postgresql + psycopg2: // postgres: [защита электронной почты]: 5432 / учебник')
df.to_sql (таблица, движок, if_exists = 'заменить')

Беглый взгляд на наш терминал pgAdmin PostgreSQL показывает, что код успешно загрузил DataFrame в таблицу «close». Теперь, когда у нас есть данные, загруженные в нашу базу данных. Мы можем использовать psycopg для выполнения некоторых запросов к данным. Приведенный ниже метод создан для того, чтобы взять соединение, установленное в нашем первом методе, и выполнить запрос в нашей базе данных PostgreSQL. Чтобы создать 4 объекта SQL, нам нужно добавить еще один оператор импорта.

из psycopg2 импортировать sql

Чтобы создать динамические команды SQL, psycopg использует форматирование строки для заполнения переменных в строке с помощью операторов% s и .

PostrgreSQL чувствителен к регистру. В методе get_data () мы заставили заголовки наших столбцов использовать строчные буквы. Индекс не был включен в эту инструкцию. Чтобы передать заголовок столбца «Данные» в запросе, нам нужно передать его в PostgreSQL в двойных кавычках. Чтобы сделать это в строке в Python, вам необходимо отправить escape-символ «\» перед двойными кавычками.

Мы можем заменить «% s» в строке, используя синтаксис форматирования строки Python, указанный ниже. Это заменяет% s нашим параметром даты dt.

Чтобы выполнить созданный SQL-запрос. Затем вам нужно передать его в курсор .execute () метод. Позвонив в .fetchall (), вы возвращаете результаты запроса. При печати на консоли вы можете отображать результаты.

def get_row (dt, conn):
cr = conn.курсор()
query = sql.SQL ("ВЫБРАТЬ aapl из закрытия WHERE" Date "= '% s'"% dt)
cr.выполнить (запрос)
печать cr.fetchall ()

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

get_row ("2017-12-29", conn)

В следующем методе мы будем использовать методы строкового формата для передачи нескольких параметров в наш запрос. Этот запрос займет дату и три столбца. Помимо использования оператора% s, мы будем использовать оператор для объединения строковых переменных в строку и вставки их в нашу строку запроса. Наша строка запроса теперь использует соединение ниже с разделителем «,» для передачи нескольких имен столбцов в наш запрос.

def get_cols (dt, col1, col2, col3, conn):
cr = conn.курсор()
query = sql.SQL ("SELECT from close WHERE" Date "= '% s'"% dt).формат(
sql.SQL (',').присоединиться ([sql.Идентификатор (col1), sql.Идентификатор (col2), sql.Идентификатор (col3)]))
cr.выполнить (запрос)
печать cr.fetchall ()

Чтобы использовать наш новый метод, я добавлю следующую строку в наш метод tutorial_run (). Вы должны увидеть результаты ниже.

get_cols ("2017-12-29", "aapl", "spy", "goog", conn)

Следующий метод, который мы напишем, будет использовать две замены строк для извлечения всех данных в нашей таблице, за исключением нашего индекса. Этот метод основан на нашем предыдущем методе, добавляя вторую нотацию заменяющих скобок «1». На этот раз скобки пронумерованы так, что они заменены в коде понятия формата заказа. Наш новый метод объединяет три параметра столбца через запятую. Кроме того, вторым параметром в методе форматирования является табличная переменная. Затем создается строка запроса путем замены скобок параметрами в методе форматирования в следующем порядке:. Это 0 = столбцы и 1 = имя таблицы.

def get_tab (таблица, col1, col2, col3, conn):
cr = conn.курсор()
query = sql.SQL ("ВЫБРАТЬ 0 из 1").формат(
sql.SQL (',').присоединиться ([sql.Идентификатор (col1), sql.Идентификатор (col2),
sql.Идентификатор (col3)]), sql.Идентификатор (таблица))
cr.выполнить (запрос)
печать cr.fetchall ()

Чтобы использовать наш новый метод, я добавлю следующую строку в наш метод tutorial_run (). Вы должны увидеть результаты ниже.

get_tab ("закрыть", "aapl", "шпион", "goog", conn)

В библиотеке psycopg есть еще много методов. Это должно дать вам хорошее представление о функциях psycopg. Я предоставил еще несколько ресурсов ниже на страницах документации, которые позволят вам более подробно изучить библиотеку.

Полный код

импорт psycopg2
из psycopg2 импортировать sql
импортировать pandas_datareader как данные
def get_data (символы, начальная_дата, конечная_дата):
панель = данные.DataReader (символы, "yahoo", начальная_дата, конечная_дата)
df = панель ["Закрыть"]
df.columns = map (str.нижний, df.столбцы)
hd = список (df)
печать df.глава()
печать HD
return df
def connect ():
cons = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
пытаться:
conn = psycopg2.подключить (минусы)
печать "Подключено"
Кроме:
печать "Я не могу подключиться к базе данных"
return conn
def create_table (таблица, df):
engine = create_engine ('postgresql + psycopg2: // postgres: [защита электронной почты]: 5432 / учебник')
df.to_sql (таблица, движок, if_exists = "заменить")
def get_row (dt, conn):
cr = conn.курсор()
query = sql.SQL ("ВЫБРАТЬ aapl из закрытия WHERE" Date "= '% s'"% dt)
cr.выполнить (запрос)
печать cr.fetchall ()
def get_cols (dt, col1, col2, col3, conn):
cr = conn.курсор()
query = sql.SQL ("SELECT from close WHERE" Date "= '% s'"% dt).формат(
sql.SQL (',').присоединиться ([sql.Идентификатор (col1),
sql.Идентификатор (col2), sql.Идентификатор (col3)]))
cr.выполнить (запрос)
печать cr.fetchall ()
def get_tab (таблица, col1, col2, col3, conn):
cr = conn.курсор()
query = sql.SQL ("ВЫБРАТЬ 0 из 1").формат(
sql.SQL (',').присоединиться ([sql.Идентификатор (col1), sql.Идентификатор (col2),
sql.Идентификатор (col3)]), sql.Идентификатор (таблица))
cr.выполнить (запрос)
печать cr.fetchall ()
def tutorial_run ():
conn = connect ()
символы = ['SPY', 'AAPL', 'GOOG']
df = get_data (символы, '2006-01-03', '2017-12-31')
create_table ("закрыть", df)
get_row ("2017-12-29", conn)
get_cols ("2017-12-29", "aapl", "spy", "goog", conn)
get_tab ("закрыть", "aapl", "spy", "goog", conn)
если __name__ == "__main__":
tutorial_run ()

Рекомендации

initd.org / psycopg
initd.org / psycopg / docs / install.html
http: // initd.org / psycopg / docs / sql.html
вики.postgresql.org / wiki / Psycopg2_Tutorial

Как загрузить и играть в Sid Meier's Civilization VI в Linux
Введение в игру Civilization 6 - это современный подход к классической концепции, представленной в серии игр Age of Empires. Идея была довольно просто...
Как установить Doom и играть в него в Linux
Введение в Doom Серия Doom возникла в 90-х годах после выхода оригинальной Doom. Это мгновенно стал хитом, и с тех пор серия игр получила множество на...
Vulkan для пользователей Linux
С каждым новым поколением видеокарт мы видим, как разработчики игр расширяют границы графической точности и приближаются на шаг ближе к фотореализму. ...