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

文章标题:Python 如何与数据库交互?
  • 文章分类: 后端
  • 7946 阅读
在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与数据库进行交互,为构建高效、可扩展的应用程序打下坚实的基础。