数据库是应用的心脏,而Python则是连接这颗心脏的温柔之手。今天,我们就来探索如何用Python优雅地与数据库共舞,让你的程序数据流转如丝般顺滑。💃
1. 初识SQLite:Python的内置宝藏
SQLite随Python而来,就像旅行中的小背包,轻便又实用。让我们打开它看看。
import sqlite3
# 连接到SQLite数据库,如果不存在,就会创建
conn = sqlite3.connect('my_database.db')
print("数据库连接成功!🎉")
# 创建游标对象,执行SQL命令
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER
)
""")
这段代码就像在说:“嘿,Python,帮我创建一个叫my_database.db的数据库,里面放一张表users,有id、name和age三个字段。”
2. 插入数据,让表不再空荡
别让表空着,给它填点数据吧!
# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 30)")
conn.commit() # 记得提交操作,不然数据就飞了!
print("用户'Alice'已成功入住数据库旅馆!🏡")
这里,execute是执行SQL命令的魔术师,commit则确保变化被永久保存。
3. 查询艺术:获取数据的正确姿势
想知道数据库里住着谁吗?查询一下吧!
# 查询数据
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")
# 别忘了关闭游标和连接
cursor.close()
conn.close()
就像在说:“给我看看users表里的所有居民。”然后,一行行打印出来,记得清理现场哦(关闭游标和连接)。
4. 参数化查询:安全第一的原则
直接拼接SQL字符串?不,那不安全。参数化查询,安全又高效!
name_to_find = "Bob"
cursor.execute("SELECT * FROM users WHERE name=?", (name_to_find,))
bob_info = cursor.fetchone()
if bob_info:
print(f"找到了Bob,详情:{bob_info}")
else:
print("Bob不在列表中。😔")
这里的问号(?)是占位符,后面的元组是实际值,这样可以防止SQL注入攻击。
5. 更新数据:给Alice换个年龄
人会成长,数据库记录也一样需要更新。
new_age = 31
cursor.execute("UPDATE users SET age=? WHERE name='Alice'", (new_age,))
conn.commit()
print("Alice现在是31岁啦!🎂")
告诉Python:“把名为Alice的用户年龄改为31”,然后提交更改。
6. 删除记录:再见,虚拟用户
有时候,告别也是必要的。
cursor.execute("DELETE FROM users WHERE name='VirtualUser'")
conn.commit()
print("虚拟用户已删除,再见不送。👋")
简单明了,“虚拟用户”从此在数据库中消失。
7. 高级技巧:事务处理
想象一下,要么全做,要么全不做。这就是事务的魅力。
try:
cursor.execute("BEGIN") # 开始事务
cursor.execute("UPDATE users SET age=32 WHERE name='Alice'")
cursor.execute("INSERT INTO users (name, age) VALUES ('Charlie', 25)")
conn.commit() # 如果一切顺利,提交事务
print("事务完成!👍")
except Exception as e:
conn.rollback() # 出错,撤销所有操作
print(f"事务回滚,因为:{e}")
这就像在说:“我有一系列操作,要么全成功,要么全不干。”
8. 连接其他数据库:MySQL的约会
SQLite之外,Python还能牵手其他数据库。以MySQL为例:
首先,你需要安装mysql-connector-python库。
pip install mysql-connector-python
然后,来一场浪漫的约会:
import mysql.connector
cnx = mysql.connector.connect(user='your_username', password='your_password',
host='localhost',
database='your_database')
cursor = cnx.cursor()
# 执行SQL操作...
记住替换你的数据库信息,Python同样能与MySQL共舞。
9. 错误处理:优雅面对失败
编程中,遇到错误不要怕,优雅处理才是关键。
try:
# 尝试执行的代码...
except sqlite3.Error as error:
print(f"数据库错误:{error}")
finally:
# 不管成功还是失败,都要执行的代码
if conn:
conn.close()
这段代码就像是你的安全网,确保无论发生什么,都能安全落地。
10. ORM:让Python说话更自然
ORM(对象关系映射),让Python和数据库的对话更加自然,比如使用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:///new_database.db")
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
# 添加用户
new_user = User(name='David', age=28)
session.add(new_user)
session.commit()
# 查询用户
users = session.query(User).all()
for user in users:
print(user.name)
ORM就像一位翻译,让你用Python的对象思维操作数据库,是不是更亲切了?
到这里,我们的数据库编程之旅就告一段落了。但这只是开始,Python与数据库的故事深邃且广阔,等待你去探索更多的可能。带着这些技巧,去构建你的数据世界吧!