全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
1172 3
2024-06-11
数据库是应用的心脏,而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与数据库的故事深邃且广阔,等待你去探索更多的可能。带着这些技巧,去构建你的数据世界吧!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2024-6-11 08:21:23
沙发自己做一下
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-6-30 16:06:09
给你点个赞
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-7-10 09:24:03
[handshake][handshake]点赞
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群