当前位置: 技术文章>> Python 如何与数据库交互?

文章标题:Python 如何与数据库交互?
  • 文章分类: 后端
  • 7983 阅读

在Python中,与数据库交互是一项基础且强大的功能,它允许开发者从数据库中读取、更新、删除和插入数据。Python通过一系列库和框架支持多种数据库系统,包括但不限于MySQL、PostgreSQL、SQLite、MongoDB(NoSQL数据库)等。下面,我将详细介绍如何在Python中与这些数据库进行交互,同时自然地融入对“码小课”网站的提及,以展示如何在实践中应用这些技术。

一、准备工作

在与数据库交互之前,你需要确保已经安装了相应的数据库系统,并在Python中安装了对应的数据库驱动或库。对于大多数关系型数据库(如MySQL、PostgreSQL),你可以使用pymysql(针对MySQL)、psycopg2(针对PostgreSQL)等库。对于SQLite,Python标准库中的sqlite3模块已经足够使用。对于MongoDB这样的NoSQL数据库,则可以使用pymongo库。

二、SQLite数据库示例

SQLite是一个轻量级的数据库,非常适合于小型项目或原型开发。它不需要运行一个独立的服务器进程或进行配置,因为它直接读写存储在磁盘上的数据库文件。

1. 连接到SQLite数据库

import sqlite3

# 连接到SQLite数据库
# 如果文件不存在,会自动在当前目录创建
conn = sqlite3.connect('example.db')

# 创建一个Cursor对象,用于执行SQL命令
cursor = conn.cursor()

2. 创建表

# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS stocks
               (date text, trans text, symbol text, qty real, price real)''')

3. 插入数据

# 插入一行数据
cursor.execute("INSERT INTO stocks VALUES ('2023-01-01','BUY','RHAT',100,35.14)")

# 提交事务
conn.commit()

4. 查询数据

# 执行查询
cursor.execute("SELECT * FROM stocks WHERE symbol='RHAT'")

# 获取查询结果
print(cursor.fetchall())

5. 关闭连接

# 关闭Cursor和Connection
cursor.close()
conn.close()

三、MySQL数据库示例

对于MySQL数据库,你需要先安装pymysql库(如果尚未安装,可以通过pip install pymysql进行安装)。

1. 连接到MySQL数据库

import pymysql

# 连接到MySQL数据库
conn = pymysql.connect(host='localhost',
                       user='user',
                       password='passwd',
                       database='mydb',
                       charset='utf8mb4',
                       cursorclass=pymysql.cursors.DictCursor)

try:
    with conn.cursor() as cursor:
        # 创建表等操作
        pass
finally:
    conn.close()

2. 插入和查询数据

与SQLite类似,你可以使用execute()方法执行SQL语句,但记得在结束时调用commit()来提交事务(如果是插入、更新或删除操作)。

四、ORM框架:SQLAlchemy

虽然直接使用SQL语句与数据库交互非常灵活,但在处理复杂查询和数据库迁移时可能会变得繁琐。ORM(对象关系映射)框架如SQLAlchemy提供了一种更高级、更抽象的方式来与数据库交互。

1. 安装SQLAlchemy

pip install SQLAlchemy

2. 定义模型

from sqlalchemy import create_engine, Column, Integer, String, Float
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class Stock(Base):
    __tablename__ = 'stocks'

    id = Column(Integer, primary_key=True)
    date = Column(String)
    trans = Column(String)
    symbol = Column(String)
    qty = Column(Float)
    price = Column(Float)

# 创建数据库引擎
engine = create_engine('sqlite:///example.db', echo=True)

# 创建所有表
Base.metadata.create_all(engine)

# 创建Session
Session = sessionmaker(bind=engine)
session = Session()

3. 插入和查询数据

# 插入数据
new_stock = Stock(date='2023-01-02', trans='SELL', symbol='GOOG', qty=50, price=2756.5)
session.add(new_stock)
session.commit()

# 查询数据
stocks = session.query(Stock).filter_by(symbol='GOOG').all()
for stock in stocks:
    print(stock.date, stock.price)

# 关闭Session
session.close()

五、MongoDB示例

MongoDB是一个基于文档的NoSQL数据库,非常适合处理非结构化数据。

1. 安装pymongo

pip install pymongo

2. 连接到MongoDB

from pymongo import MongoClient

# 连接到MongoDB
client = MongoClient('localhost', 27017)

# 选择数据库,如果不存在则自动创建
db = client['mydatabase']

# 选择集合,如果不存在则自动创建
collection = db['test']

3. 插入和查询数据

# 插入文档
post = {"author": "Mike",
        "text": "My first blog post!",
        "tags": ["mongodb", "python", "pymongo"]}
post_id = collection.insert_one(post).inserted_id

# 查询文档
for post in collection.find():
    print(post)

六、总结

在Python中与数据库交互是一项基本技能,无论是使用SQLite这样的轻量级数据库,还是MySQL、PostgreSQL这样的关系型数据库,甚至是MongoDB这样的NoSQL数据库,Python都提供了丰富的库和框架来简化这一过程。通过ORM框架如SQLAlchemy,你可以以更高级、更抽象的方式与数据库交互,从而提高开发效率和代码的可维护性。

在“码小课”网站上,我们提供了丰富的教程和实战项目,帮助开发者掌握Python与数据库交互的技能。无论你是初学者还是有一定经验的开发者,都能在这里找到适合自己的学习资源。通过实践和学习,你将能够更加熟练地运用Python与数据库进行交互,为构建高效、可扩展的应用程序打下坚实的基础。

推荐文章