SQLAlchemy
SQLAlchemy 是一个开源的 Python SQL 工具包和对象关系映射器 (ORM)。 它为应用程序开发人员提供了 SQL 的全部功能和灵活性。 简单来说,它允许开发者使用 Pythonic 的领域语言来访问和管理 SQL 数据库,而不是直接编写 SQL 查询语句。
核心功能:
- ORM (Object Relational Mapper): 这是 SQLAlchemy 最著名的功能之一。 它允许您将 Python 类(模型)映射到数据库中的表。 这样,您就可以通过操作 Python 对象来间接地操作数据库表,实现了对象模型和数据库模式的解耦。
- SQL Expression Language (Core): SQLAlchemy Core 提供了一套丰富的 API,用于以编程方式构建 SQL 查询。 即使您不使用 ORM,也可以利用 Core 来编写更灵活、更强大的数据库查询,同时还能兼容多种数据库后端。
- 数据库无关性: SQLAlchemy 支持多种数据库后端,例如 SQLite、MySQL、PostgreSQL 等。 这意味着您可以在不同的数据库之间切换,而只需对代码进行最小的改动。
- 连接池和事务管理: 它提供了健壮的工具来管理数据库连接池和处理事务。
简单用法 (以 ORM 为例):
以下是一个简单的 SQLAlchemy ORM 使用流程:
-
安装:
bash
pip install sqlalchemy -
定义模型: 使用 Python 类来定义数据库表的结构。
python
sqlalchemy.orgfrom sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.orm import declarative_base, sessionmaker # 创建一个基础类 Base = declarative_base() # 定义一个 User 模型,映射到 'users' 表 class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) fullname = Column(String) def __repr__(self): return f"<User(name='{self.name}', fullname='{self.fullname}')>" -
创建引擎和会话: 引擎 (Engine) 负责与数据库建立连接,会话 (Session) 则用于管理对象的持久化。sqlalchemy.org+1
python
# 创建一个连接到内存中 SQLite 数据库的引擎 engine = create_engine('sqlite:///:memory:') # 在数据库中创建所有定义的表 Base.metadata.create_all(engine) # 创建一个会话类 Session = sessionmaker(bind=engine) session = Session() -
添加和查询数据: 通过会话来添加和查询对象。
python
# 创建一个新的 User 对象 new_user = User(name='john', fullname='John Doe') session.add(new_user) session.commit() # 提交事务 # 查询所有用户 all_users = session.query(User).all() for user in all_users: print(user) # 按条件查询 user_by_name = session.query(User).filter_by(name='john').first() print(user_by_name)
sshtunnel
sshtunnel 是一个 Python 库,用于通过 SSH 连接创建隧道。 SSH 隧道是一种通过加密的 SSH 连接来传输任意网络数据的方法。 它可以用来为旧版应用程序添加加密功能,或者用于实现 VPN 和跨防火墙访问内部网服务。
核心功能:
- 端口转发: 这是 sshtunnel 的核心功能。它允许您将本地计算机上的一个端口(本地端口)的连接,通过安全的 SSH 通道转发到远程服务器上的另一个端口(远程端口)。
- 访问受限资源: 如果某个网络服务(例如数据库)只允许在服务器本地访问,您可以使用 sshtunnel 创建一个安全的隧道,从您的本地计算机访问该服务。
- 安全性: 所有通过 SSH 隧道传输的数据都是加密的,可以防止在传输过程中被窃听或拦截。
简单用法:
以下是一个使用 sshtunnel 连接到远程 MySQL 数据库的简单示例:
-
安装:
bash
pip install sshtunnel -
创建 SSH 隧道: 假设您有一个远程服务器,上面运行着一个只允许本地连接的 MySQL 服务。您可以使用 sshtunnel 在本地创建一个端口,将所有到该端口的连接都转发到远程服务器的 MySQL 端口。
python
from sshtunnel import SSHTunnelForwarder import pymysql # 假设使用 pymysql 连接 MySQL # 远程 SSH 服务器的信息 SSH_HOST = 'your_ssh_host' SSH_USER = 'your_ssh_user' SSH_PASSWORD = 'your_ssh_password' # 或使用密钥 # 远程 MySQL 服务器的信息 (从 SSH 服务器的角度看) REMOTE_DB_HOST = '127.0.0.1' REMOTE_DB_PORT = 3306 with SSHTunnelForwarder( (SSH_HOST, 22), # SSH 服务器地址和端口 ssh_username=SSH_USER, ssh_password=SSH_PASSWORD, remote_bind_address=(REMOTE_DB_HOST, REMOTE_DB_PORT) ) as server: # server.local_bind_port 是本地绑定的端口 local_port = server.local_bind_port print(f"本地端口 {local_port} 已通过 SSH 隧道连接到远程 MySQL。") # 现在可以使用本地端口连接到远程数据库 try: connection = pymysql.connect( host='127.0.0.1', port=local_port, user='your_db_user', password='your_db_password', database='your_db_name' ) print("成功连接到数据库!") # 在这里执行数据库操作... connection.close() except Exception as e: print(f"数据库连接失败: {e}") print("SSH 隧道已关闭。")
2237

被折叠的 条评论
为什么被折叠?



