Przejdź do treści stopki
POMOC DOTYCZąCA JęZYKA PYTHON

psycopg2 (Jak to działa dla programistów)

Biblioteka psycopg2 jest popularnym adapterem bazy danych PostgreSQL dla języka programowania Python. Jest znany ze swojej wydajności, bezpieczeństwa wątków oraz pełnej implementacji specyfikacji Python DB API 2.0. Przyjrzyjmy się jego funkcjom i zobaczmy kilka przykładów kodu. W dalszej części tego artykułu zapoznamy się z IronPDF, biblioteką do generowania plików PDF firmy Iron Software.

Psycopg2 został zaprojektowany z myślą o wydajności i bezpieczeństwie, dzięki czemu nadaje się do zastosowań w aplikacjach intensywnie wykorzystujących wielowątkowość. Niektóre z jego kluczowych funkcji to:

  • Bezpieczeństwo wątków: wiele wątków może współdzielić to samo połączenie — możliwość obsługi aplikacji wielowątkowych, które tworzą i niszczą wiele kursorów.
  • Kursory po stronie klienta i po stronie serwera: wydajna obsługa dużych zbiorów danych.
  • Komunikacja asynchroniczna i powiadomienia: Obsługa operacji asynchronicznych.
  • Obsługa COPY: Efektywne ładowanie danych zbiorczo za pomocą poleceń COPY TO i COPY FROM.
  • System adaptacji: Automatycznie dostosowuje typy Pythona do typów PostgreSQL; pakiet automatycznie przekształca je na odpowiadające typy danych PostgreSQL.
  • Obsługa Unicode i Python 3: Pełna obsługa Unicode i Python 3.

Instalacja

Możesz zainstalować psycopg2 za pomocą pip:

pip install psycopg2
pip install psycopg2
SHELL

Alternatywnie można użyć pliku setup.py z pakietu źródłowego lokalnie. Pakiet źródłowy można pobrać z repozytorium kodu źródłowego tutaj:

python setup.py build
sudo python setup.py install
python setup.py build
sudo python setup.py install
SHELL

W przypadku samodzielnego pakietu, który nie wymaga kompilatora ani bibliotek zewnętrznych, można użyć pakietu psycopg2-binary:

pip install psycopg2-binary
pip install psycopg2-binary
SHELL

Podstawowe zastosowanie

Oto prosty przykład, który pomoże Ci rozpocząć pracę z psycopg2.

Łączenie się z bazą danych

Najpierw musisz połączyć się z bazą danych PostgreSQL:

import psycopg2

# Connect to your PostgreSQL database
conn = psycopg2.connect(
    dbname="your_dbname",
    user="your_username",
    password="your_password",
    host="your_host",
    port="your_port"
)

# Create a cursor object
cur = conn.cursor()
import psycopg2

# Connect to your PostgreSQL database
conn = psycopg2.connect(
    dbname="your_dbname",
    user="your_username",
    password="your_password",
    host="your_host",
    port="your_port"
)

# Create a cursor object
cur = conn.cursor()
PYTHON

Wykonywanie zapytań

Możesz wykonywać zapytania SQL za pomocą obiektu kursora:

# Execute a query
cur.execute("SELECT * FROM your_table")

# Fetch all results
rows = cur.fetchall()

# Print the results
for row in rows:
    print(row)
# Execute a query
cur.execute("SELECT * FROM your_table")

# Fetch all results
rows = cur.fetchall()

# Print the results
for row in rows:
    print(row)
PYTHON

Wstawianie danych

Oto jak wstawić dane do tabeli:

# Insert data into a table
cur.execute(
    "INSERT INTO your_table (column1, column2) VALUES (%s, %s)",
    ("value1", "value2")
)

# Commit the transaction
conn.commit()
# Insert data into a table
cur.execute(
    "INSERT INTO your_table (column1, column2) VALUES (%s, %s)",
    ("value1", "value2")
)

# Commit the transaction
conn.commit()
PYTHON

Zamykanie połączenia

Nie zapomnij zamknąć kursora i połączenia po zakończeniu pracy:

# Close the cursor and connection
cur.close()
conn.close()
# Close the cursor and connection
cur.close()
conn.close()
PYTHON

Zaawansowane funkcje

Korzystanie z COPY do ładowania zbiorczego

Polecenie COPY jest przydatne do zbiorczego ładowania danych:

# Use COPY to load data from a file
with open('data.csv', 'r') as f:
    cur.copy_from(f, 'your_table', sep=',')

conn.commit()
# Use COPY to load data from a file
with open('data.csv', 'r') as f:
    cur.copy_from(f, 'your_table', sep=',')

conn.commit()
PYTHON

Powiadomienia asynchroniczne

Możesz nasłuchiwać asynchronicznych powiadomień z bazy danych:

# Listen for notifications
cur.execute("LISTEN your_channel")

# Wait for a notification
conn.poll()

while conn.notifies:
    notify = conn.notifies.pop(0)
    print("Got NOTIFY:", notify.payload)
# Listen for notifications
cur.execute("LISTEN your_channel")

# Wait for a notification
conn.poll()

while conn.notifies:
    notify = conn.notifies.pop(0)
    print("Got NOTIFY:", notify.payload)
PYTHON

Przedstawiamy IronPDF

psycopg2 (Jak to działa dla programistów): Rysunek 1 – IronPDF: biblioteka PDF dla języka Python

IronPDF to potężna biblioteka języka Python przeznaczona do tworzenia, edytowania i podpisywania plików PDF przy użyciu HTML, CSS, obrazów i JavaScript. Oferuje wydajność na poziomie komercyjnym przy niewielkim zużyciu pamięci. Najważniejsze cechy to:

Konwersja HTML do PDF:

Konwertuj pliki HTML, ciągi znaków HTML i adresy URL na pliki PDF. Na przykład, renderuj stronę internetową jako plik PDF przy użyciu renderera PDF przeglądarki Chrome.

Obsługa wielu platform:

Kompatybilny z różnymi platformami .NET, w tym .NET Core, .NET Standard i .NET Framework. Obsługuje systemy Windows, Linux i macOS.

Redakcja i podpisanie:

Ustawiaj właściwości, dodawaj zabezpieczenia za pomocą haseł i uprawnień oraz stosuj podpisy cyfrowe w plikach PDF.

Szablony stron i ustawienia:

Dostosuj pliki PDF, dodając nagłówki, stopki, numery stron i regulowane marginesy. Obsługuje responsywne układy i niestandardowe rozmiary papieru.

Zgodność z normami:

Zgodność ze standardami PDF, takimi jak PDF/A i PDF/UA. Obsługuje kodowanie znaków UTF-8 oraz pliki takie jak obrazy, CSS i czcionki.

Generowanie dokumentów PDF przy użyciu IronPDF i psycopg2

import psycopg2
from ironpdf import *

# Apply your license key
License.LicenseKey = "Key"

# Connect to your local PostgreSQL database
conn = psycopg2.connect(
    dbname="demo",
    user="postgres",
    password="postgres",
    host="localhost",
    port="5432"
)

# Create a cursor object
cur = conn.cursor()

# Create the users table if it doesn't already exist
cur.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        age INTEGER
    )
''')

# Commit the transaction
conn.commit()

# Define the SQL statement for inserting data into the table
insert_query = '''
    INSERT INTO users (id, name, age)
    VALUES (%s, %s, %s)
'''

# Data to be inserted
user_data = [
    (1, 'John', 25),
    (2, 'Smith', 35),
    (3, 'Tom', 29)
]

# Insert data into the table
for user in user_data:
    cur.execute(insert_query, user)

# Commit the transaction
conn.commit()

# Execute a query to retrieve data from the users table
cur.execute("SELECT * FROM users")

# Fetch all results
rows = cur.fetchall()

# Initialize PDF renderer
renderer = ChromePdfRenderer()

# Create a PDF from HTML content
content = "<h1>Awesome Iron PDF with psycopg2</h1>"
content += "<p>Table data:</p>"
for row in rows:
    print(row)
    content += f"<p>{row}</p>"

# Close the cursor and connection
cur.close()
conn.close()

# Render HTML content as PDF
pdf = renderer.RenderHtmlAsPdf(content)

# Save the PDF to a file
pdf.SaveAs("Demopsycopg2.pdf")
import psycopg2
from ironpdf import *

# Apply your license key
License.LicenseKey = "Key"

# Connect to your local PostgreSQL database
conn = psycopg2.connect(
    dbname="demo",
    user="postgres",
    password="postgres",
    host="localhost",
    port="5432"
)

# Create a cursor object
cur = conn.cursor()

# Create the users table if it doesn't already exist
cur.execute('''
    CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL,
        age INTEGER
    )
''')

# Commit the transaction
conn.commit()

# Define the SQL statement for inserting data into the table
insert_query = '''
    INSERT INTO users (id, name, age)
    VALUES (%s, %s, %s)
'''

# Data to be inserted
user_data = [
    (1, 'John', 25),
    (2, 'Smith', 35),
    (3, 'Tom', 29)
]

# Insert data into the table
for user in user_data:
    cur.execute(insert_query, user)

# Commit the transaction
conn.commit()

# Execute a query to retrieve data from the users table
cur.execute("SELECT * FROM users")

# Fetch all results
rows = cur.fetchall()

# Initialize PDF renderer
renderer = ChromePdfRenderer()

# Create a PDF from HTML content
content = "<h1>Awesome Iron PDF with psycopg2</h1>"
content += "<p>Table data:</p>"
for row in rows:
    print(row)
    content += f"<p>{row}</p>"

# Close the cursor and connection
cur.close()
conn.close()

# Render HTML content as PDF
pdf = renderer.RenderHtmlAsPdf(content)

# Save the PDF to a file
pdf.SaveAs("Demopsycopg2.pdf")
PYTHON

Wyjaśnienie kodu

Skrypt demonstruje interakcję z bazą danych PostgreSQL przy użyciu psycopg2, manipulację danymi (tworzenie, wstawianie, pobieranie) oraz integrację z IronPDF w celu generowania dokumentów.

  1. Połączenie z bazą danych: Łączy się z lokalną bazą danych PostgreSQL o nazwie "demo" za pomocą psycopg2, podając dane uwierzytelniające użytkownika oraz szczegóły hosta bazy danych.
  2. Tworzenie tabeli: Definiuje i wykonuje instrukcję SQL w celu utworzenia tabeli o nazwie users, jeśli jeszcze nie istnieje. Tabela zawiera kolumny id (liczba całkowita, klucz główny), name (tekst, nie może być pusty) oraz age (liczba całkowita).
  3. Wstawianie danych: Wstawia wiersze danych do tabeli users przy użyciu zapytań parametrycznych (user_data). Każda krotka zawiera wartości dla id, name i age.
  4. Zarządzanie transakcjami: zatwierdza transakcję po utworzeniu tabeli i wstawieniu danych, aby zapewnić zapisanie zmian w bazie danych.
  5. Pobieranie danych: Wykonuje zapytanie SELECT w celu pobrania wszystkich wierszy (SELECT * FROM users) z tabeli users i pobiera wyniki (rows).

  6. Generowanie plików PDF: Wykorzystuje IronPDF do generowania dokumentu PDF na podstawie treści HTML. Treść HTML zawiera tytuł oraz sformatowaną reprezentację danych pobranych z tabeli users.
  7. Zapisywanie pliku: Zapisuje wygenerowany dokument PDF jako "Demopsycopg2.pdf" w bieżącym katalogu.
  8. Zamykanie połączenia: Zamyka kursor bazy danych (cur) oraz połączenie z bazą danych (conn) w celu zwolnienia zasobów i zapewnienia prawidłowego czyszczenia.

W celu obsługi wyjątków należy umieścić skrypt w blokach try-catch, aby zapewnić obsługę wszystkich operacji błędowych w przypadku wystąpienia problemu z zapytaniem lub połączeniem.

Wynik

psycopg2 (Jak to działa dla programistów): Rysunek 2 – Przykładowy wynik konsoli

PDF

psycopg2 (Jak to działa dla programistów): Rysunek 3 – Przykładowy wynik wykorzystujący psycopg2 do przechowywania i pobierania danych, podczas gdy IronPDF generuje raport w formacie PDF

Licencja IronPDF

IronPDF działa na licencji Python. IronPDF for Python oferuje bezplatną licencję probną, aby umożliwić użytkownikom przetestowanie jego rozbudowanych funkcji przed zakupem.

Umieść klucz licencyjny na początku skryptu przed użyciem pakietu IronPDF:

from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
from ironpdf import *
# Apply your license key
License.LicenseKey = "key"
PYTHON

Wnioski

Psycopg2 to potężna i elastyczna biblioteka do interakcji z bazami danych PostgreSQL w języku Python. Jego wszechstronny zestaw funkcji i wydajna konstrukcja sprawiają, że jest to doskonały wybór do prostych i złożonych operacji na bazach danych. IronPDF to solidny pakiet i biblioteka w języku Python, która ułatwia tworzenie, edycję i renderowanie dokumentów PDF bezpośrednio z aplikacji napisanych w języku Python. Oferuje kompleksowe funkcje do generowania plików PDF z treści HTML, płynnie integrując się z istniejącymi technologiami internetowymi. Dzięki IronPDF programiści mogą efektywnie zautomatyzować generowanie raportów, faktur i innych dokumentów, zwiększając produktywność i poprawiając komfort użytkowania. Jego możliwości obejmują interaktywne formularze PDF, wyodrębnianie tekstu, łączenie i dzielenie plików PDF oraz dodawanie funkcji zabezpieczeń, takich jak ochrona hasłem. Wszechstronność i łatwość obsługi IronPDF sprawiają, że jest to cenne narzędzie dla programistów pragnących wdrożyć funkcje generowania i edycji plików PDF w swoich projektach w języku Python.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie