Per poder treballar amb postgres desde Python haurem d'instal·lar el mòdul psycopg2.Pots consultar totes les opcions d'aquest mòdul: *pypi *github
pip install psycopg2
Per connectar a la base de dades haurem d'especificar com a mínim aquests paràmetres:
import psycopg2
connexio = psycopg2.connect(host="localhost", dbname="dbprova", user="usuariprova", password="12345")
Paràmetre | Valor |
---|---|
host | ip o nom del servidor de base de dades |
dbname | nom de la base de dades |
user | usuari per connectar a la bd |
password | password per connectar a la bd |
Un cop hagim establert la connexió contra la Base de Dades podem obrir un cursor i executar comandes SQL.
Creem dintre del Postgres una base de dades d'exemple que farem servir amb els exemples de codi:
CREATE DATABASE dbprova;
CREATE USER usuariprova WITH PASSWORD '12345';
GRANT ALL PRIVILEGES ON DATABASE dbprova TO usuariprova;
CREATE TABLE tprova(codi integer,descripcio varchar(100));
INSERT INTO tprova VALUES (1,'aaaa');
INSERT INTO tprova VALUES (2,'bbbb');
INSERT INTO tprova VALUES (3,'cccc');
import psycopg2
connexio = psycopg2.connect(host="localhost", dbname="dbprova", user="usuariprova", password="12345")
cur = connexio.cursor()
cur.execute("SELECT * FROM tprova;")
El cursor recuperarà de la base de dades tots els registres que retorni la sentència SQL. A partir d'aquí podem fer el recorregut del cursor a través de les comandes fetchone, y fetchall
# programa.py
import psycopg2
connexio = psycopg2.connect(host="localhost", dbname="dbprova", user="usuariprova", password="12345")
cur = connexio.cursor()
cur.execute("SELECT * FROM tprova;")
reg = cur.fetchone()
while reg is not None:
print(f"{reg[0]},{reg[1]}");
reg = cur.fetchone()
cur.close()
connexio.close()
Sortida:
regular@debian:~$ python3 programa.py
1,aaaaa
2,bbbbb
3,ccccc
# programa.py
import psycopg2
connexio = psycopg2.connect(host="localhost", dbname="dbprova", user="usuariprova", password="12345")
cur = connexio.cursor()
cur.execute("SELECT * FROM tprova;")
registres = cur.fetchall()
for reg in registres:
print(f"{reg[0]},{reg[1]}");
cur.close()
connexio.close()
Sortida:
regular@debian:~$ python3 programa.py
1,aaaaa
2,bbbbb
3,ccccc
Després de treballar amb la nostra base de dades, i al igual que fem amb els fitxers hem de tancar la connexió per tal d'alliberar els recursos.
posts = [
("Happy", "I am feeling very happy today", 1),
("Hot Weather", "The weather is very hot today", 2),
("Help", "I need some help with my work", 2),
("Great News", "I am getting married", 1),
("Interesting Game", "It was a fantastic game of tennis", 5),
("Party", "Anyone up for a late-night party today?", 3),
]
post_records = ", ".join(["%s"] * len(posts))
insert_query = (
f"INSERT INTO posts (title, description, user_id) VALUES {post_records}"
)
connection.autocommit = True
cursor = connection.cursor()
cursor.execute(insert_query, posts)