python从0快速上手(十四)数据库操作 你可以定义模型类来映射数据库表。
Python学习:数据库操作篇
在这个信息爆炸的时代,数据库就像是一个个巨大的宝藏库,里面藏着无数珍贵的数据宝石。而Python,就是那把能够打开这些宝藏库的神奇钥匙。在这一章中,我们将一起学习如何使用Python来操作数据库,包括SQLite、ORM(对象关系映射)以及NoSQL数据库。
1. SQLite
SQLite是一个轻量级的数据库,它不需要独立的服务器进程,数据库文件就是它存储数据的地方。在Python中,我们可以使用sqlite3
模块来操作SQLite数据库。
创建SQLite数据库:
在Python中,你可以通过sqlite3
模块连接到一个SQLite数据库,如果数据库不存在,它将自动创建。
import sqlite3
def create_connection(db_file):
""" 创建到SQLite数据库的连接 """
conn = None
try:
conn = sqlite3.connect(db_file)
return conn
except Exception as e:
print(e)
def create_table(conn):
""" 创建表 """
try:
c = conn.cursor()
c.execute("""
CREATE TABLE IF NOT EXISTS users (
id integer PRIMARY KEY,
name text NOT NULL,
age integer
);
""")
except Exception as e:
print(e)
# 创建数据库连接
conn = create_connection("mydatabase.db")
if conn is not None:
create_table(conn)
else:
print("无法创建数据库连接。")
在这个例子中,我们创建了一个名为mydatabase.db
的SQLite数据库,并在其中创建了一个名为users
的表。
插入数据:
你可以使用execute
方法来插入数据。
def insert_user(conn, user):
""" 新增用户 """
sql = ''' INSERT INTO users(name, age)
VALUES(?,?) '''
cur = conn.cursor()
cur.execute(sql, user)
conn.commit()
return cur.lastrowid
# 插入数据
user = ('Kimi', 30)
id = insert_user(conn, user)
print(f"用户ID:{id}")
在这个例子中,我们向users
表中插入了一个新的用户。
查询数据:
你可以使用execute
方法来查询数据。
def select_all_users(conn):
""" 查询所有用户 """
cur = conn.cursor()
cur.execute("SELECT * FROM users")
rows = cur.fetchall()
for row in rows:
print(row)
# 查询数据
select_all_users(conn)
在这个例子中,我们查询了users
表中的所有用户。
更新和删除数据:
你可以使用execute
方法来更新和删除数据。
def update_user(conn, user):
""" 更新用户 """
sql = ''' UPDATE users
SET name = ?
WHERE id = ?'''
cur = conn.cursor()
cur.execute(sql, user)
conn.commit()
def delete_user(conn, id):
""" 删除用户 """
sql = 'DELETE FROM users WHERE id=?'
cur = conn.cursor()
cur.execute(sql, (id,))
conn.commit()
# 更新数据
update_user(conn, ('Moonshot', 30))
# 删除数据
delete_user(conn, 1)
在这个例子中,我们更新了一个用户的名字,并删除了一个用户。
实例:创建一个图书馆管理系统
def create_library_db():
conn = create_connection("library.db")
if conn is not None:
create_table(conn)
return conn
else:
print("无法创建数据库连接。")
return None
def add_book(conn, book):
""" 添加书籍 """
sql = ''' INSERT INTO books(title, author, year)
VALUES(?,?,?) '''
cur = conn.cursor()
cur.execute(sql, book)
conn.commit()
return cur.lastrowid
def list_books(conn):
""" 列出所有书籍 """
cur = conn.cursor()
cur.execute("SELECT * FROM books")
rows = cur.fetchall()
for row in rows:
print(row)
# 创建数据库连接
conn = create_library_db()
if conn is not None:
# 添加书籍
book = ('Python编程', 'Kimi', 2024)
id = add_book(conn, book)
print(f"书籍ID:{id}")
# 列出书籍
list_books(conn)
else:
print("无法创建数据库连接。")
在这个例子中,我们创建了一个图书馆管理系统,它允许我们添加书籍和列出所有书籍。
2. ORM(对象关系映射)
ORM是一种编程技术,它允许你使用面向对象的方法来操作数据库。在Python中,我们可以使用SQLAlchemy
这样的ORM库来操作数据库。
安装SQLAlchemy:
首先,你需要安装SQLAlchemy。
pip install SQLAlchemy
定义模型:
你可以定义模型类来映射数据库表。
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
# 创建数据库引擎
engine = create_engine('sqlite:///mydatabase.db')
# 创建表
Base.metadata.create_all(engine)
在这个例子中,我们定义了一个User
模型,并创建了一个SQLite数据库。
添加数据:
你可以使用ORM会话来添加数据。
Session = sessionmaker(bind=engine)
session = Session()
new_user = User(name='Kimi', age=30)
session.add(new_user)
session.commit()
在这个例子中,我们添加了一个新的用户。
查询数据:
你可以使用ORM会话来查询数据。
# 查询所有用户
users = session.query(User).all()
for user in users:
print(user.name, user.age)
在这个例子中,我们查询了所有用户。
更新和删除数据:
你可以使用ORM会话来更新和删除数据。
# 更新用户
user_to_update = session.query(User).filter_by(name='Kimi').first()
user_to_update.age = 31
session.commit()
# 删除用户
user_to_delete = session.query(User).filter_by(name='Kimi').first()
session.delete(user_to_delete)
session.commit()
在这个例子中,我们更新了一个用户的年龄,并删除了一个用户。
实例:创建一个博客系统
class Post(Base):
__tablename__ = 'posts'
id = Column(Integer, primary_key=True)
title = Column(String)
content = Column(String)
# 创建表
Base.metadata.create_all(engine)
# 添加文章
new_post = Post(title='Python学习大纲', content='这是一篇关于Python学习大纲的文章。')
session.add(new_post)
session.commit()
# 查询文章
posts = session.query(Post).all()
for post in posts:
print(post.title, post.content)
# 更新文章
post_to_update = session.query(Post).filter_by(title='Python学习大纲').first()
post_to_update.content = '这是一篇更新后的关于Python学习大纲的文章。'
session.commit()
# 删除文章
post_to_delete = session.query(Post).filter_by(title='Python学习大纲').first()
session.delete(post_to_delete)
session.commit()
在这个例子中,我们创建了一个博客系统,它允许我们添加文章、查询文章、更新文章和删除文章。
3. NoSQL数据库
NoSQL数据库是一种非关系型数据库,它不需要固定的表结构。在Python中,我们可以使用PyMongo
这样的库来操作MongoDB这样的NoSQL数据库。
安装PyMongo:
首先,你需要安装PyMongo。
pip install pymongo
连接到MongoDB:
你可以使用PyMongo连接到MongoDB。
from pymongo import MongoClient
client = MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
在这个例子中,我们连接到了一个名为mydatabase
的MongoDB数据库。
插入数据:
你可以使用PyMongo插入数据。
users_collection = db["users"]
new_user = {"name": "Kimi", "age": 30}
users_collection.insert_one(new_user)
在这个例子中,我们向users
集合中插入了一个新的用户。
查询数据:
你可以使用PyMongo查询数据。
users = users_collection.find()
for user in users:
print(user["name"], user["age"])
在这个例子中,我们查询了users
集合中的所有用户。
更新和删除数据:
你可以使用PyMongo更新和删除数据。
# 更新用户
users_collection.update_one({"name": "Kimi"}, {"$set": {"age": 31}})
# 删除用户
users_collection.delete_one({"name": "Kimi"})
在这个例子中,我们更新了一个用户的年龄,并删除了一个用户。
实例:创建一个购物车系统
products_collection = db["products"]
carts_collection = db["carts"]
# 添加商品
new_product = {"name": "Python编程书籍", "price"
: 100}
products_collection.insert_one(new_product)
# 添加购物车
new_cart = {"user": "Kimi", "items": [{"product": "Python编程书籍", "quantity": 2}]}
carts_collection.insert_one(new_cart)
# 查询购物车
carts = carts_collection.find()
for cart in carts:
print(cart["user"], cart["items"])
# 更新购物车
carts_collection.update_one({"user": "Kimi"}, {"$set": {"items": [{"product": "Python编程书籍", "quantity": 3}]}})
在这个例子中,我们创建了一个购物车系统,它允许我们添加商品、添加购物车、查询购物车和更新购物车。
小结
数据库操作是Python中的一项强大技能,它让我们的程序能够存储和查询大量的数据。通过SQLite,我们可以操作关系型数据库。通过ORM,我们可以以面向对象的方式操作数据库。通过NoSQL数据库,我们可以操作非关系型数据库。
现在,你已经掌握了Python中数据库操作的基础。但是,这只是冰山一角。在编程的世界里,还有更多高级的概念等着你去探索。编程就像是一场冒险,而你已经迈出了第一步。祝你在编程的世界里旅途愉快!??