青少年编程与数学 02-008 Pyhon语言编程基础 23课题、数据库操作
青少年编程与数学 02-008 Pyhon语言编程基础 23课题、数据库操作
- 一、访问数据库
- 二、SQL Server
- 使用pyodbc
- 使用pymssql
- 注意事项
- 三、MySQL
- 使用mysql-connector-python
- 使用PyMySQL
- 注意事项
- 四、PostgreSQL
- 1. 安装`psycopg2`库
- 2. 连接到PostgreSQL数据库
- 3. 执行SQL查询
- 4. 插入、更新和删除数据
- 5. 关闭游标和连接
- 6. 异常处理
- 五、练习
- 项目结构
- 1. 初始化数据库和表
- 2. 数据库操作函数
- 3. 主程序入口
- 注意事项
课题摘要: 本文介绍了在Python中访问和操作数据库的基本步骤,包括选择数据库驱动、安装驱动、建立连接、创建游标对象、执行SQL查询、处理结果、提交事务以及关闭连接。文中提供了使用SQLite、SQL Server、MySQL和PostgreSQL的示例代码,展示了如何连接数据库、执行查询和插入数据。此外,还讨论了使用ORM(对象关系映射)的优势和如何使用SQLAlchemy库。文章最后提供了一个简单的图书管理系统项目结构和代码示例,包括初始化数据库、数据库操作函数和主程序入口,说明了如何添加、列出和查找书籍。这些内容为在Python中进行数据库操作提供了全面的指导。
一、访问数据库
在Python程序中访问数据库通常涉及以下几个步骤:
-
选择数据库驱动:
根据你使用的数据库类型(如MySQL、PostgreSQL、SQLite、Oracle等),你需要选择一个合适的数据库驱动或API。例如,对于MySQL,你可以使用mysql-connector-python
或者PyMySQL
;对于PostgreSQL,可以使用psycopg2
;SQLite则有内置的sqlite3
模块。 -
安装数据库驱动:
使用pip工具来安装相应的数据库驱动。例如,要安装MySQL的连接器,可以在命令行运行:pip install mysql-connector-python
-
建立数据库连接:
使用所选驱动提供的方法来创建一个到数据库的连接。这通常需要提供数据库的主机名、端口号、用户名和密码等信息。import mysql.connector connection = mysql.connector.connect( host='localhost', user='your_username', password='your_password', database='your_database' )
-
创建游标对象:
一旦建立了连接,下一步是创建一个游标对象,它允许你执行SQL语句。cursor = connection.cursor()
-
执行SQL查询:
使用游标对象执行SQL查询。cursor.execute("SELECT * FROM your_table")
-
处理结果:
如果你的查询返回了数据,那么你可以使用游标对象的方法来获取这些数据,比如fetchone()
、fetchall()
等。results = cursor.fetchall() for row in results: print(row)
-
提交事务:
对于修改数据库的SQL语句(INSERT, UPDATE, DELETE),你需要调用connection.commit()
来保存更改。connection.commit()
-
关闭连接:
完成所有操作后,确保关闭游标和连接以释放资源。cursor.close() connection.close()
这里是一个完整的例子,演示如何从SQLite数据库中读取数据:
import sqlite3
# 建立连接
conn = sqlite3.connect('example.db')
c = conn.cursor()
# 执行查询
c.execute('SELECT * FROM stocks')
# 获取并打印结果
print(c.fetchall())
# 关闭连接
conn.close()
请根据你实际使用的数据库调整上述代码。如果你需要更高级的功能,如ORM(对象关系映射),可以考虑使用像SQLAlchemy这样的库,它可以简化与数据库的交互,并提供更Pythonic的方式来处理数据。
二、SQL Server
在Python中操作SQL Server数据库,你可以使用几个流行的库,其中最常用的是pyodbc
和pymssql
。以下是使用这两个库的基本步骤:
使用pyodbc
-
安装pyodbc:
pip install pyodbc
-
连接数据库:
import pyodbc # 连接字符串 conn_str = ( r'DRIVER={ODBC Driver 17 for SQL Server};' r'SERVER=服务器地址;' r'DATABASE=数据库名;' r'UID=用户名;' r'PWD=密码' ) # 建立连接 conn = pyodbc.connect(conn_str) cursor = conn.cursor()
-
执行SQL语句:
# 执行查询 cursor.execute("SELECT * FROM 表名") rows = cursor.fetchall() for row in rows: print(row) # 执行插入、更新或删除 cursor.execute("INSERT INTO 表名 (列1, 列2) VALUES (?, ?)", (值1, 值2)) conn.commit() # 提交事务
-
关闭连接:
cursor.close() conn.close()
使用pymssql
-
安装pymssql:
pip install pymssql
-
连接数据库:
import pymssql # 连接字符串 conn = pymssql.connect(server='服务器地址', user='用户名', password='密码', database='数据库名') cursor = conn.cursor()
-
执行SQL语句:
# 执行查询 cursor.execute("SELECT * FROM 表名") rows = cursor.fetchall() for row in rows: print(row) # 执行插入、更新或删除 cursor.execute("INSERT INTO 表名 (列1, 列2) VALUES (%s, %s)", (值1, 值2)) conn.commit() # 提交事务
-
关闭连接:
cursor.close() conn.close()
注意事项
- 确保你已经安装了适用于SQL Server的ODBC驱动程序,对于
pyodbc
来说,这是必需的。 - 替换连接字符串中的服务器地址、数据库名、用户名和密码为你的实际信息。
- 在执行插入、更新或删除操作后,记得调用
commit()
方法来提交事务。 - 错误处理:在实际应用中,你应该添加错误处理逻辑来处理可能出现的异常。
这些是基本的步骤和代码示例,根据你的具体需求,可能需要进行相应的调整和优化。
三、MySQL
在Python中操作MySQL数据库,你可以使用mysql-connector-python
或PyMySQL
这两个库。以下是使用这两个库的基本步骤:
使用mysql-connector-python
-
安装mysql-connector-python:
pip install mysql-connector-python
-
连接数据库:
import mysql.connector # 连接配置 config = { 'user': '用户名', 'password': '密码', 'host': '服务器地址', 'database': '数据库名', 'raise_on_warnings': True } # 建立连接 cnx = mysql.connector.connect(**config) cursor = cnx.cursor()
-
执行SQL语句:
# 执行查询 cursor.execute("SELECT * FROM 表名") for row in cursor: print(row) # 执行插入、更新或删除 cursor.execute("INSERT INTO 表名 (列1, 列2) VALUES (%s, %s)", (值1, 值2)) cnx.commit() # 提交事务
-
关闭连接:
cursor.close() cnx.close()
使用PyMySQL
-
安装PyMySQL:
pip install PyMySQL
-
连接数据库:
import pymysql # 连接配置 connection = pymysql.connect(host='服务器地址', user='用户名', password='密码', database='数据库名', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)
-
执行SQL语句:
# 使用with语句自动管理连接和游标 with connection.cursor() as cursor: # 执行查询 cursor.execute("SELECT * FROM 表名") result = cursor.fetchall() for row in result: print(row) # 执行插入、更新或删除 cursor.execute("INSERT INTO 表名 (列1, 列2) VALUES (%s, %s)", (值1, 值2)) connection.commit() # 提交事务
-
关闭连接:
connection.close()
注意事项
- 确保MySQL服务正在运行,并且你有正确的权限访问数据库。
- 替换连接配置中的服务器地址、数据库名、用户名和密码为你的实际信息。
- 在执行插入、更新或删除操作后,记得调用
commit()
方法来提交事务。 - 错误处理:在实际应用中,你应该添加错误处理逻辑来处理可能出现的异常。
- 使用
with
语句可以确保即使在发生异常的情况下,连接和游标也能被正确关闭。
这些是基本的步骤和代码示例,根据你的具体需求,可能需要进行相应的调整和优化。
四、PostgreSQL
要在Python程序中操作PostgreSQL数据库,你可以使用psycopg2
库,这是一个流行的PostgreSQL适配器,允许你连接并操作PostgreSQL数据库。以下是基本的步骤和代码示例:
1. 安装psycopg2
库
首先,你需要安装psycopg2
库,可以使用pip进行安装:
pip install psycopg2
或者,如果你需要一个二进制轮子(wheel),可以使用psycopg2-binary
:
pip install psycopg2-binary
2. 连接到PostgreSQL数据库
使用psycopg2
连接到PostgreSQL数据库的基本步骤如下:
import psycopg2
# 数据库连接参数
conn_params = {
'dbname': 'your_database_name',
'user': 'your_username',
'password': 'your_password',
'host': 'your_host',
'port': '5432'
}
# 建立连接
conn = psycopg2.connect(**conn_params)
# 创建游标对象
cur = conn.cursor()
# 打印连接信息
print("连接成功")
3. 执行SQL查询
你可以使用游标对象执行SQL查询并获取结果:
# 执行 SQL 查询
cur.execute("SELECT * FROM your_table_name;")
# 获取查询结果
rows = cur.fetchall()
# 输出结果
for row in rows:
print(row)
4. 插入、更新和删除数据
对于插入、更新或删除操作,你也需要使用游标对象执行SQL语句,并提交事务:
# 插入数据
cur.execute("INSERT INTO your_table_name (column1, column2) VALUES (%s, %s)", (value1, value2))
conn.commit()
# 更新数据
cur.execute("UPDATE your_table_name SET column1 = %s WHERE column2 = %s", (new_value1, condition_value2))
conn.commit()
# 删除数据
cur.execute("DELETE FROM your_table_name WHERE column1 = %s", (value1,))
conn.commit()
5. 关闭游标和连接
操作完成后,记得关闭游标和连接:
cur.close()
conn.close()
6. 异常处理
在生产环境中,应该加入异常处理以避免程序崩溃:
import psycopg2
from psycopg2 import OperationalError
def connect_to_db():
try:
conn = psycopg2.connect(
dbname="your_database_name",
user="your_username",
password="your_password",
host="your_host",
port="your_port"
)
print("连接成功!")
return conn
except OperationalError as e:
print(f"连接失败: {e}")
return None
def fetch_data():
conn = connect_to_db()
if conn:
try:
cur = conn.cursor()
cur.execute("SELECT * FROM your_table_name;")
rows = cur.fetchall()
for row in rows:
print(row)
except Exception as e:
print(f"查询失败: {e}")
finally:
cur.close()
conn.close()
fetch_data()
以上步骤和代码示例提供了在Python中操作PostgreSQL数据库的基本方法,包括连接、查询、插入、更新和删除数据等操作。
五、练习
创建一个完整的Python项目来管理个人图书涉及到多个步骤,包括设置数据库、编写代码以及可能的前端界面(这里我们只关注后端)。以下是一个简单的项目结构和代码示例,用于创建和操作一个个人图书管理系统。
项目结构
personal_library/
│
├── database/
│ └── init_db.py # 初始化数据库和表
│
├── lib/
│ └── database.py # 数据库操作函数
│
└── main.py # 主程序入口
1. 初始化数据库和表
在database/init_db.py
中,我们将创建数据库和图书表:
import psycopg2
from psycopg2 import sql
def create_database():
conn = None
try:
# 连接到 PostgreSQL
conn = psycopg2.connect(
dbname="postgres",
user="your_username",
password="your_password",
host="your_host",
port="5432"
)
cur = conn.cursor()
# 创建数据库
cur.execute("CREATE DATABASE personal_library_db;")
print("Database created successfully.")
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
def create_table():
conn = None
try:
# 连接到创建的数据库
conn = psycopg2.connect(
dbname="personal_library_db",
user="your_username",
password="your_password",
host="your_host",
port="5432"
)
cur = conn.cursor()
# 创建图书表
cur.execute("""
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
author VARCHAR(255) NOT NULL,
published_year INT,
isbn VARCHAR(13),
genre VARCHAR(100)
);
""")
print("Table created successfully.")
except (Exception, psycopg2.DatabaseError) as error:
print(error)
finally:
if conn is not None:
conn.close()
if __name__ == "__main__":
create_database()
create_table()
2. 数据库操作函数
在lib/database.py
中,我们将编写一些函数来操作数据库:
import psycopg2
def connect_db():
conn = psycopg2.connect(
dbname="personal_library_db",
user="your_username",
password="your_password",
host="your_host",
port="5432"
)
return conn
def add_book(title, author, published_year, isbn, genre):
conn = connect_db()
cur = conn.cursor()
cur.execute("""
INSERT INTO books (title, author, published_year, isbn, genre)
VALUES (%s, %s, %s, %s, %s);
""", (title, author, published_year, isbn, genre))
conn.commit()
cur.close()
conn.close()
def list_books():
conn = connect_db()
cur = conn.cursor()
cur.execute("SELECT * FROM books;")
rows = cur.fetchall()
cur.close()
conn.close()
return rows
def find_book_by_title(title):
conn = connect_db()
cur = conn.cursor()
cur.execute("SELECT * FROM books WHERE title = %s;", (title,))
rows = cur.fetchall()
cur.close()
conn.close()
return rows
# 可以继续添加更多的函数,比如更新和删除书籍
3. 主程序入口
在main.py
中,我们将编写主程序逻辑:
from lib.database import add_book, list_books, find_book_by_title
def main():
print("Welcome to the Personal Library Manager!")
# 示例:添加书籍
add_book("1984", "George Orwell", 1949, "978-0451524935", "Dystopian")
add_book("To Kill a Mockingbird", "Harper Lee", 1960, "978-0061120084", "Fiction")
# 示例:列出所有书籍
books = list_books()
for book in books:
print(book)
# 示例:按标题查找书籍
books = find_book_by_title("1984")
for book in books:
print(book)
if __name__ == "__main__":
main()
注意事项
- 确保你已经安装了
psycopg2
库。 - 替换数据库连接参数中的用户名、密码、主机和端口为你的实际信息。
- 这个项目是一个非常基础的示例,没有错误处理和输入验证,这些在实际应用中是非常重要的。
- 你可以根据需要扩展更多的功能,比如删除书籍、更新书籍信息、搜索功能等。
- 这个项目没有包含用户界面,你可以考虑使用Flask或Django这样的框架来创建一个Web界面。
这个项目提供了一个基本的框架,你可以在此基础上进行扩展和改进,以满足更多的需求。