PostgreSQL – Интерфейс Python
Установка
PostgreSQL может быть интегрирована с Python при помощи модуля psycopg2. psycopg2 – это адаптер базы данных PostgreSQL для языка Python, маленький, быстрый и стабильный. Вам не нужно его устанавливать отдельно, поскольку он по умолчанию поставляется с Python версией 2.5.x.
Если на Вашем компьютере адаптер все же не установлен, используйте команду:
$yum install python-psycopg2
Для использования модуля psycopg2 сначала необходимо создать объект Connection, который представляет собой базу данных, а затем, по желанию, объект Cursor, который поможет Вам в выполнении всех команд SQL.
API модуля psycopg2
Приводим важные команды модуля psycopg2, которых вполне достаточно для работы с базой данных PostgreSQL из Вашей программы Python. Если Вам нужно более современное приложение, ознакомьтесь с официальной документацией модуля psycopg2.
|
S. No. |
API и Описание |
|
1 |
psycopg2.connect(database="testdb", user="postgres", password="cohondob", host="127.0.0.1", port="5432") Создает подключение к экземпляру базы данных PostgreSQL. В случае успешного подключения он возвращает объект подключения. |
|
2 |
connection.cursor() Создает Курсор, который будет использован для работы с базой данных . |
|
3 |
cursor.execute(sql [, optional parameters]) Выполняет команду SQL, которая может быть параметризована, а не выражена в буквах. В данном случае модуль psycopg2 выражает параметры с помощью знака %. Например, cursor.execute("insert into people values (%s, %s)", (who, age)) |
|
4 |
cursor.executemany(sql, seq_of_parameters) Выполняет команду SQL для всех элементов последовательности seq_of_parameters , которые содержат параметры запроса или словари именованных параметров. |
|
5 |
cursor.callproc(procname[, parameters]) Вызывает процедуру с последовательностью аргументов |
|
6 |
cursor.rowcount Только для чтения, возвращает количество строк, затронутых операторами SQL, такими, как SELECT, UPDATE или INSERT. |
|
7 |
connection.commit() Подтверждает текущую транзакцию. Если Вы не используете данный метод, все, что вы сделали после последнего commit() не видно из других соединений с базой данных. |
|
8 |
connection.rollback() Откатывает назад любые изменения, внесенные в базу данных, с момента последнего commit(). |
|
9 |
connection.close() Закрывает соединение с базой данных. Имейте в виду, что это не подразумевает автоматического commit(). Если Вы просто закроете базу данных без предварительного commit(), все Ваши изменения будут потеряны! |
|
10 |
cursor.fetchone() Извлекает следующую строку набора результатов запроса, возвращая одну последовательность или None, если больше нет доступных данных. |
|
11 |
cursor.fetchmany([size=cursor.arraysize]) Bизвлекает следующий набор строк результата запроса, возвращая список. Возвращает пустой список, когда больше нет доступных строк. Метод должен попытаться извлечь столько строк, сколько указано параметром size. |
|
12 |
cursor.fetchall() Выбирает все оставшиеся строки результата запроса, возвращая список. Возвращает пустой список, когда нет доступных строк. |
Подключение к базе данных
Следующий код Python показывает, как подключиться к существующей базе данных:
#!/usr/bin/python import psycopg2 conn = psycopg2.connect(database="testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432") print "Opened database successfully"
В данном случае Вы также можете указать testdb в качестве имени, и если база данных успешно открыта, Вы увидите следующее сообщение:
Open database successfully
Создать базу данных
Следующая программа Python используется для создания таблицы:
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"
cur = conn.cursor()
cur.execute('''CREATE TABLE COMPANY
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL);''')
print "Table created successfully"
conn.commit()
conn.close()
Результатом выполнения данной программы станет создание таблицы COMPANY В Вашей test.db, и Вы увидите следующее сообщение:
Opened database successfully Table created successfully
Операция INSERT
Следующая программа Python создаст записи в таблице COMPANY:
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"
cur = conn.cursor()
cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (1, 'Paul', 32, 'California', 20000.00 )");
cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");
cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");
cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");
conn.commit()
print "Records created successfully";
conn.close()
В результате выполнения программы в таблице COMPANY будут созданы записи, и Вы увидите следующие уведомления:
Opened database successfully Records created successfully
Операция SELECT
Следующая программа Python выбирает записи из таблицы COMPANY и отображает их:
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"
cur = conn.cursor()
cur.execute("SELECT id, name, address, salary from COMPANY")
rows = cur.fetchall()
for row in rows:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print "Operation done successfully";
conn.close()
Результат выполнения программы:
Opened database successfully ID = 1 NAME = Paul ADDRESS = California SALARY = 20000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
Операция UPDATE
Следующий код Python покажет, как использовать UPDATE для обновления любых записей и последующего отображения обновленной таблицы COMPANY:
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"
cur = conn.cursor()
cur.execute("UPDATE COMPANY set SALARY = 25000.00 where ID = 1")
conn.commit()
print "Total number of rows updated :", cur.rowcount
cur.execute("SELECT id, name, address, salary from COMPANY")
rows = cur.fetchall()
for row in rows:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print "Operation done successfully";
conn.close()
Результат выполнения программы следующий:
Opened database successfully Total number of rows updated : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 25000.0 ID = 2 NAME = Allen ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
Операция DELETE
Следующий код Python показывает, как использовать DELETE для удаления любой записи и последующего отображения оставшихся в таблице COMPANY записей:
#!/usr/bin/python
import psycopg2
conn = psycopg2.connect(database = "testdb", user = "postgres", password = "pass123", host = "127.0.0.1", port = "5432")
print "Opened database successfully"
cur = conn.cursor()
cur.execute("DELETE from COMPANY where ID=2;")
conn.commit()
print "Total number of rows deleted :", cur.rowcount
cur.execute("SELECT id, name, address, salary from COMPANY")
rows = cur.fetchall()
for row in rows:
print "ID = ", row[0]
print "NAME = ", row[1]
print "ADDRESS = ", row[2]
print "SALARY = ", row[3], "\n"
print "Operation done successfully";
conn.close()
Результат выполнения программы:
Opened database successfully Total number of rows deleted : 1 ID = 1 NAME = Paul ADDRESS = California SALARY = 20000.0 ID = 3 NAME = Teddy ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully



