Psycopg2

Урок за Psycopg2

Урок за Psycopg2

Урок за Python, PostgreSQL и Psycopg2

За да се разработи приложение извън обикновен скрипт, е необходимо да се запазят данни извън паметта в база данни.  Има много възможни възможности за избор на база данни, но PostgreSQL е стабилна платформа с отворен код, която лесно може да се мащабира до производство.

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

Можете да инсталирате Psycopg2 чрез командата pip по-долу.

$ pip инсталирайте 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.7MB)
100% | ████████████████████████████████ | 1.7MB 397kB / s
Инсталиране на събрани пакети: psycopg2
Успешно инсталиран psycopg2-2.7.3.2
Bradleys-Mini: ~ BradleyPatton $

За да импортирате пакета Psycopg2 във вашето приложение на Python, използвате долния ред код.

импортиране на psycopg2

За да получа някои данни за зареждане в нашата база данни, аз съм заимствал малко код от предишен урок за панди. Кодът по-долу ще създаде pandas DataFrame с исторически данни.  След това ще се използва за създаване на таблица в таблица PostgreSQL.

def get_data (символи, start_date, end_date):
панел = данни.DataReader (символи, 'yahoo', start_date, end_date)
df = панел ['Затваряне']
df.колони = карта (str.по-ниско, df.колони)
hd = списък (df)
отпечатай df.глава()
печат hd
връщане df

Сега ще настроя код за домакинство, използван за стартиране на урока. Тези два метода ще бъдат използвани за извикване на методите Psycopg2, които създаваме.

def tutorial_run ():
символи = ['SPY', 'AAPL', 'GOOG']
df = get_data (символи, '03.01.2006', '2017-12-31')
ако __name__ == "__main__":
tutorial_run ()

За да се свържем с базата данни PostgreSQL, ще трябва да добавим метода по-долу. Опитът \ с изключение осигурява известна обработка на грешки в случай, че локалната база данни не се изпълнява или в базата данни се предават неправилни параметри на свързване. Методът за свързване в библиотеката Psycopg2 се свързва с базата данни с параметрите, предадени в низа на свързване. Вашите параметри за dbname, потребител и парола могат да се различават. Ако връзката не успее по някаква причина, съобщението за грешка ще бъде записано в конзолата. Този метод връща обекта на връзката обратно към нашия метод за повикване, където може да се използва за по-нататъшни операции с база данни.

def connect ():
cons = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
опитвам:
conn = psycopg2.свързване (минуси)
печат "Свързан"
с изключение:
print "Не мога да се свържа с базата данни"
връщане конн

След като установим връзката с базата данни PostgreSQL, можем да заредим данните си от метода get_data () в нашата база данни. Psycopg2 и пандите правят това много прост процес.

Първият ред определя метода, който пандите трябва да използват, за да се свържат с базата данни, за да копират DataFrame. Ще предоставите същите параметри като вашия метод на свързване. Вторият ред код продължава DataFrame към базата данни PostgreSQL с метода to_sql ().

def create_table (таблица, df):
engine = create_engine ('postgresql + psycopg2: // postgres: [имейл защитен]: 5432 / урок')
df.to_sql (таблица, двигател, ако_съществува = 'замени')

Бърз поглед в нашия терминал PostgreSQL pgAdmin показва, че кодът успешно е заредил DataFrame в таблицата „close“. Сега, когато имаме заредени данни в нашата база данни. Можем да използваме psycopg, за да стартираме някои заявки към данните. Методът по-долу е създаден, за да вземе връзката, установена в първия ни метод, и да изпълни заявка в нашата база данни PostgreSQL. За да създадем 4-те SQL обекта, трябва да добавим още един оператор за импортиране.

от psycopg2 import sql

За да създаде динамични SQL команди, psycopg използва форматиране на низове, за да попълни променливи в низа, използвайки операторите% s и .

PostrgreSQL чувствителен е към регистъра. В метода get_data () принудихме заглавките на колоните ни с малки букви. Индексът не беше включен в тази инструкция. За да предадем заглавката на колоната „Data“ в заявката, трябва да я предадем на PostgreSQL с двойни кавички. За да направите това в низ в Python, трябва да изпратите екраниращия символ „\“ преди двойните кавички.

Можем да заменим „% s“ в низа, като използваме синтаксиса за форматиране на низовете на python по-долу. Това замества% s с нашия параметър за дата dt.

За изпълнение на SQL заявката, която е създадена. След това трябва да го предадете на курсора .метод execute (). Като се обадите на .fetchall (), връщате резултатите от заявката. Когато се отпечатва на конзолата, можете да покажете резултатите.

def get_row (dt, conn):
cr = конн.курсор ()
заявка = sql.SQL ("SELECT aapl от близко WHERE" Date "= '% s'"% dt)
кр.изпълни (заявка)
печат cr.извличане ()

За да стартираме тази функция, ние добавяме долния ред код към метода tutorial_run (). Трябва да получите резултати, подобни на посочените по-долу.

get_row ("29.12.2017", свързване)

В следващия метод ще използваме методите на низовия формат, за да предадем множество параметри в нашата заявка. Тази заявка ще отнеме дата и три колони. В допълнение към използването на оператора% s, ние ще използваме оператора , за да присъединим променливите на низ в низ и да ги инжектираме в нашия низ за заявки. Нашият низ за заявка вече използва съединението по-долу с разделител “,”, за да предаде множество имена на колони в нашата заявка.

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

За да използвам новия ни метод, ще добавя реда по-долу към метода tutorial_run (). Трябва да видите резултатите по-долу.

get_cols ("2017-12-29", "aapl", "шпионин", "goog", conn)

Следващият метод, който пишем, ще използва две замени на низове, за да изтегли всички данни в нашата таблица, с изключение на нашия индекс. Този метод се основава на предишния ни метод, като добавя втора заместваща нотация на скобата „1“. Този път скобите са номерирани, така че да бъдат заменени в кода на понятието за формат на поръчката. Нашият нов метод обединява трите колони с разделител на запетая. Освен това вторият параметър в метода на форматирането е променливата на таблицата. След това низът на заявката се конструира чрез замяна на скобите с параметрите в метода на форматирането по ред. Това е 0 = колони и 1 = име на таблица.

def get_tab (таблица, col1, col2, col3, conn):
cr = конн.курсор ()
заявка = sql.SQL („ИЗБЕРЕТЕ 0 от 1“).формат (
кв.SQL (',').присъединяване ([sql.Идентификатор (col1), sql.Идентификатор (col2),
кв.Идентификатор (col3)]), sql.Идентификатор (таблица))
кр.изпълни (заявка)
печат cr.извличане ()

За да използвам нашия нов метод, ще добавя реда по-долу към нашия метод tutorial_run (). Трябва да видите резултатите по-долу.

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

Има много повече методи за изследване в библиотеката на psycopg. Това трябва да започне с добро разбиране на функциите на psycopg. По-долу съм предоставил още ресурси в страниците с документация, които ще ви позволят да разгледате по-подробно библиотеката.

Пълен код

импортиране на psycopg2
от psycopg2 import sql
импортирайте pandas_datareader като данни
def get_data (символи, start_date, end_date):
панел = данни.DataReader (символи, 'yahoo', start_date, end_date)
df = панел ['Затваряне']
df.колони = карта (str.по-ниско, df.колони)
hd = списък (df)
отпечатай df.глава()
печат hd
връщане df
def connect ():
cons = "dbname = 'tutorial' user =" postgres "host =" localhost "password =" password ""
опитвам:
conn = psycopg2.свързване (минуси)
печат "Свързан"
с изключение:
print "Не мога да се свържа с базата данни"
връщане конн
def create_table (таблица, df):
engine = create_engine ('postgresql + psycopg2: // postgres: [имейл защитен]: 5432 / урок')
df.to_sql (таблица, двигател, ако_съществува = "замени")
def get_row (dt, conn):
cr = конн.курсор ()
заявка = sql.SQL ("SELECT aapl от близко WHERE" Date "= '% s'"% dt)
кр.изпълни (заявка)
печат cr.извличане ()
def get_cols (dt, col1, col2, col3, conn):
cr = конн.курсор ()
заявка = sql.SQL ("SELECT от близо WHERE" Date "= '% s'"% dt).формат (
кв.SQL (',').присъединяване ([sql.Идентификатор (col1),
кв.Идентификатор (col2), sql.Идентификатор (col3)]))
кр.изпълни (заявка)
печат cr.извличане ()
def get_tab (таблица, col1, col2, col3, conn):
cr = конн.курсор ()
заявка = sql.SQL („ИЗБЕРЕТЕ 0 от 1“).формат (
кв.SQL (',').присъединяване ([sql.Идентификатор (col1), sql.Идентификатор (col2),
кв.Идентификатор (col3)]), sql.Идентификатор (таблица))
кр.изпълни (заявка)
печат cr.извличане ()
def tutorial_run ():
свързване = свързване ()
символи = ['SPY', 'AAPL', 'GOOG']
df = get_data (символи, '03.01.2006', '2017-12-31')
create_table ("close", df)
get_row ("29.12.2017", свързване)
get_cols ("2017-12-29", "aapl", "шпионин", "goog", conn)
get_tab ("затвори", "aapl", "шпионин", "goog", conn)
ако __name__ == "__main__":
tutorial_run ()

Препратки

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

Как да обърнете посоката на превъртане на мишката и тъчпада в Windows 10
Мишка и Тъчпадs не само правят изчисленията лесни, но и по-ефективни и отнемат по-малко време. Не можем да си представим живот без тези устройства, но...
Как да промените курсора на мишката и размера на курсора, цвета и схемата в Windows 10
Показалецът на мишката и курсорът в Windows 10 са много важни аспекти на операционната система. Това може да се каже и за други операционни системи, т...
Безплатни и игри с отворен код за разработване на Linux игри
Тази статия ще обхване списък с безплатни двигатели за игри с отворен код, които могат да се използват за разработване на 2D и 3D игри на Linux. Същес...