当前位置: 技术文章>> Python 如何与数据库交互?
文章标题:Python 如何与数据库交互?
在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数据库
```python
import sqlite3
# 连接到SQLite数据库
# 如果文件不存在,会自动在当前目录创建
conn = sqlite3.connect('example.db')
# 创建一个Cursor对象,用于执行SQL命令
cursor = conn.cursor()
```
#### 2. 创建表
```python
# 创建一个表
cursor.execute('''CREATE TABLE IF NOT EXISTS stocks
(date text, trans text, symbol text, qty real, price real)''')
```
#### 3. 插入数据
```python
# 插入一行数据
cursor.execute("INSERT INTO stocks VALUES ('2023-01-01','BUY','RHAT',100,35.14)")
# 提交事务
conn.commit()
```
#### 4. 查询数据
```python
# 执行查询
cursor.execute("SELECT * FROM stocks WHERE symbol='RHAT'")
# 获取查询结果
print(cursor.fetchall())
```
#### 5. 关闭连接
```python
# 关闭Cursor和Connection
cursor.close()
conn.close()
```
### 三、MySQL数据库示例
对于MySQL数据库,你需要先安装`pymysql`库(如果尚未安装,可以通过`pip install pymysql`进行安装)。
#### 1. 连接到MySQL数据库
```python
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
```bash
pip install SQLAlchemy
```
#### 2. 定义模型
```python
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. 插入和查询数据
```python
# 插入数据
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
```bash
pip install pymongo
```
#### 2. 连接到MongoDB
```python
from pymongo import MongoClient
# 连接到MongoDB
client = MongoClient('localhost', 27017)
# 选择数据库,如果不存在则自动创建
db = client['mydatabase']
# 选择集合,如果不存在则自动创建
collection = db['test']
```
#### 3. 插入和查询数据
```python
# 插入文档
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与数据库进行交互,为构建高效、可扩展的应用程序打下坚实的基础。