Connexió a Base de dades Postgres¶
Introducció¶
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
Instal·lem el mòdul psycopg2 de Python¶
Connectar a la base de dades¶
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 |
Cursors¶
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
Seleccionem un registre de la base de dades: FETCHONE¶
# 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:
Seleccionem tots els registres: FETCHALL¶
# 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:
Tancar la connexió: CLOSE¶
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.
Inserir registres¶
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)