📜  PostgreSQL- Python接口

📅  最后修改于: 2020-11-26 06:44:35             🧑  作者: Mango


安装

可以使用psycopg2模块将PostgreSQL与Python集成。 sycopg2是用于Python编程语言的PostgreSQL数据库适配器。 psycopg2的编写目标是非常小巧,快速,稳定如磐石。您不需要单独安装此模块,因为默认情况下该模块是与Python 2.5.x及更高版本一起提供的。

如果您的计算机上尚未安装它,则可以使用yum命令如下安装它-

$yum install python-psycopg2

要使用psycopg2模块,必须首先创建一个代表数据库的Connection对象,然后可以选择创建游标对象,该对象将帮助您执行所有SQL语句。

Python psycopg2模块API

以下是重要的psycopg2模块例程,这些例程可以满足您从Python程序使用PostgreSQL数据库的要求。如果您正在寻找更复杂的应用程序,则可以查看Python psycopg2模块的官方文档。

S. No. API & Description
1

psycopg2.connect(database=”testdb”, user=”postgres”, password=”cohondob”, host=”127.0.0.1″, port=”5432″)

This API opens a connection to the PostgreSQL database. If database is opened successfully, it returns a connection object.

2

connection.cursor()

This routine creates a cursor which will be used throughout of your database programming with Python.

3

cursor.execute(sql [, optional parameters])

This routine executes an SQL statement. The SQL statement may be parameterized (i.e., placeholders instead of SQL literals). The psycopg2 module supports placeholder using %s sign

For example:cursor.execute(“insert into people values (%s, %s)”, (who, age))

4

cursor.executemany(sql, seq_of_parameters)

This routine executes an SQL command against all parameter sequences or mappings found in the sequence sql.

5

cursor.callproc(procname[, parameters])

This routine executes a stored database procedure with the given name. The sequence of parameters must contain one entry for each argument that the procedure expects.

6

cursor.rowcount

This read-only attribute which returns the total number of database rows that have been modified, inserted, or deleted by the last last execute*().

7

connection.commit()

This method commits the current transaction. If you do not call this method, anything you did since the last call to commit() is not visible from other database connections.

8

connection.rollback()

This method rolls back any changes to the database since the last call to commit().

9

connection.close()

This method closes the database connection. Note that this does not automatically call commit(). If you just close your database connection without calling commit() first, your changes will be lost!

10

cursor.fetchone()

This method fetches the next row of a query result set, returning a single sequence, or None when no more data is available.

11

cursor.fetchmany([size=cursor.arraysize])

This routine fetches the next set of rows of a query result, returning a list. An empty list is returned when no more rows are available. The method tries to fetch as many rows as indicated by the size parameter.

12

cursor.fetchall()

This routine fetches all (remaining) rows of a query result, returning a list. An empty list is returned when no rows are available.

连接到数据库

以下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()

执行上述给定程序后,它将在test.db中创建COMPANY表,并将显示以下消息-

Opened database successfully
Table created successfully

插入操作

以下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

选择操作

以下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

删除操作

以下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