Python tutorials > Working with External Resources > Databases > How to connect to relational databases?
How to connect to relational databases?
This tutorial demonstrates how to connect to relational databases using Python. We'll cover the basics of database connections, using different database connectors, and handling potential errors.
Connecting to a SQLite Database
This code snippet demonstrates connecting to a SQLite database. First, we import the `sqlite3` module. The `sqlite3.connect()` function establishes a connection to the database file (e.g., 'mydatabase.db'). If the file doesn't exist, it will be created. A cursor object is then created, which allows us to execute SQL commands. Here, we optionally create a table named 'users' if it doesn't already exist. `conn.commit()` saves the changes to the database. Finally, `conn.close()` closes the connection, releasing resources.
import sqlite3
# Connect to a database (or create it if it doesn't exist)
conn = sqlite3.connect('mydatabase.db')
# Create a cursor object to execute SQL queries
cursor = conn.cursor()
# Optionally, create a table
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
)
''')
# Commit the changes
conn.commit()
# Close the connection
conn.close()
Connecting to a PostgreSQL Database (psycopg2)
This code snippet demonstrates connecting to a PostgreSQL database using the `psycopg2` library. First, you need to install the library: `pip install psycopg2-binary`. Then, specify your database credentials (dbname, user, host, password, port). The `psycopg2.connect()` function establishes the connection. A cursor is created for executing SQL. An example query to get the database version is included. Error handling using `try...except...finally` is important for robust applications. The `finally` block ensures the connection is closed even if errors occur.
import psycopg2
# Database credentials
dbname = 'mydatabase'
user = 'myuser'
host = 'localhost'
password = 'mypassword'
port = '5432'
try:
# Establish a connection
conn = psycopg2.connect(dbname=dbname, user=user, host=host, password=password, port=port)
# Create a cursor object
cur = conn.cursor()
# Example query (optional)
cur.execute("SELECT version();")
db_version = cur.fetchone()
print(db_version)
# Commit changes
conn.commit()
except psycopg2.Error as e:
print(f"Error connecting to PostgreSQL: {e}")
finally:
# Close the connection
if conn:
cur.close()
conn.close()
print("PostgreSQL connection closed.")
Connecting to a MySQL Database (mysql-connector-python)
This code snippet demonstrates connecting to a MySQL database using the `mysql-connector-python` library. Install it with `pip install mysql-connector-python`. Provide the host, user, password, and database name. The `mysql.connector.connect()` function establishes the connection. A cursor is created for executing SQL queries. An example query retrieves the MySQL version. Error handling is implemented using `try...except...finally` to ensure connection closure even in case of errors.
import mysql.connector
# Database credentials
host = 'localhost'
user = 'myuser'
password = 'mypassword'
database = 'mydatabase'
try:
# Establish a connection
mydb = mysql.connector.connect(
host=host,
user=user,
password=password,
database=database
)
# Create a cursor object
mycursor = mydb.cursor()
# Example query (optional)
mycursor.execute("SELECT VERSION()")
result = mycursor.fetchone()
print(result)
except mysql.connector.Error as err:
print(f"Error connecting to MySQL: {err}")
finally:
# Close the connection
if mydb and mydb.is_connected():
mycursor.close()
mydb.close()
print("MySQL connection closed")
Concepts Behind the Snippet
Database connections involve establishing a communication channel between your Python application and the database server. This channel allows you to send SQL queries to the database and receive results. Key concepts include: Connection Strings: These contain the necessary information (host, user, password, database name) to locate and authenticate with the database server. Cursors: Cursors are objects that allow you to execute SQL queries and fetch the results. Transactions: Transactions are a sequence of operations treated as a single logical unit of work. Either all operations within a transaction succeed, or none of them do (atomicity). Connection Pooling: Reusing existing database connections instead of creating new ones for each request can significantly improve performance.
Real-Life Use Case
Consider a web application that needs to store user data (name, email, password). When a user registers, the application connects to the database, inserts the user's data into a 'users' table, and then closes the connection. Similarly, when a user logs in, the application connects to the database, queries the 'users' table to verify the credentials, and retrieves the user's information.
Best Practices
Interview Tip
Be prepared to discuss the importance of connection pooling, exception handling, and security (preventing SQL injection) when working with databases in Python. Also, be familiar with different database connectors (e.g., psycopg2, mysql-connector-python) and their specific connection methods.
When to Use Them
Use database connections whenever your Python application needs to store or retrieve persistent data. This is common in web applications, data analysis pipelines, and any application that requires data to be stored between sessions.
Memory Footprint
Database connections can consume significant memory, especially if you keep many connections open simultaneously. Connection pooling can help to minimize the memory footprint by reusing existing connections. Properly closing connections when they are no longer needed is crucial for releasing resources.
Alternatives
Alternatives to relational databases include NoSQL databases (e.g., MongoDB, Cassandra) and object-relational mappers (ORMs) such as SQLAlchemy. ORMs provide a higher-level abstraction over the database, allowing you to interact with the database using Python objects instead of raw SQL.
Pros
Cons
FAQ
-
What is a connection string?
A connection string contains all the information needed to locate and connect to a database server, including the host, port, username, password, and database name.
-
How do I prevent SQL injection?
Use parameterized queries or prepared statements. These allow you to pass data as separate parameters to the SQL query, preventing malicious code from being injected into the query itself.
-
Why is it important to close database connections?
Closing database connections releases resources held by the database server. Failing to close connections can lead to resource exhaustion and performance problems.