A Python package for querying Azure SQL Server via ODBC
Project description
RealSQLTool
一个用于通过ODBC连接和查询Azure SQL Server的Python包。
功能特性
- ✨ 简单易用的API
- 🔐 支持多种身份验证方式(SQL Server身份验证、Windows身份验证)
- 📊 支持多种返回格式(DataFrame、字典、元组)
- 🚀 批量操作支持
- 🔍 表结构查询
- 🛡️ 参数化查询,防止SQL注入
- 📦 上下文管理器支持
安装
前置条件
-
安装Microsoft ODBC Driver for SQL Server
- Windows: 从Microsoft官网下载安装
- Linux: 参考官方文档
-
安装Python包
cd realsqltool
pip install -e .
快速开始
命令行工具
安装后,你可以使用 realsqltool 命令行工具:
# 列出可用的ODBC驱动
realsqltool drivers
# 测试连接
realsqltool test -s myserver.database.windows.net -d mydatabase -u myuser -p mypass
# 列出数据库中的表
realsqltool tables -s myserver.database.windows.net -d mydatabase -u myuser -p mypass
# 执行查询
realsqltool query -s myserver.database.windows.net -d mydatabase -u myuser -p mypass -q "SELECT * FROM Users"
# 从文件执行查询
realsqltool query -s myserver.database.windows.net -d mydatabase -u myuser -p mypass -f query.sql
基本连接
from realsqltool import AzureSQLConnection, QueryExecutor
# 创建连接
conn = AzureSQLConnection(
server="myserver.database.windows.net",
database="mydatabase",
username="myusername",
password="mypassword"
)
# 创建查询执行器
executor = QueryExecutor(conn)
执行查询
# 查询并返回DataFrame
df = executor.execute_query("SELECT * FROM Users")
print(df)
# 查询并返回字典列表
results = executor.execute_query(
"SELECT * FROM Users WHERE Age > ?",
params=(18,),
return_type="dict"
)
# 执行标量查询
count = executor.execute_scalar("SELECT COUNT(*) FROM Users")
print(f"用户总数: {count}")
使用上下文管理器
from realsqltool import AzureSQLConnection, QueryExecutor
# 自动管理连接
with AzureSQLConnection(
server="myserver.database.windows.net",
database="mydatabase",
username="myusername",
password="mypassword"
) as conn:
executor = QueryExecutor(conn)
df = executor.execute_query("SELECT * FROM Users")
print(df)
# 连接自动关闭
读取表数据
# 读取整个表
df = executor.read_table("Users")
# 读取特定列
df = executor.read_table(
"Users",
columns=["Name", "Email", "Age"]
)
# 带条件查询
df = executor.read_table(
"Users",
where_clause="Age >= 18",
order_by="Name ASC",
limit=100
)
执行非查询语句
# INSERT
rows_affected = executor.execute_non_query(
"INSERT INTO Users (Name, Email, Age) VALUES (?, ?, ?)",
params=("张三", "zhangsan@example.com", 25)
)
# UPDATE
rows_affected = executor.execute_non_query(
"UPDATE Users SET Age = ? WHERE Name = ?",
params=(26, "张三")
)
# DELETE
rows_affected = executor.execute_non_query(
"DELETE FROM Users WHERE Age < ?",
params=(18,)
)
批量操作
# 批量插入
params_list = [
("用户1", "user1@example.com", 20),
("用户2", "user2@example.com", 25),
("用户3", "user3@example.com", 30),
]
total_rows = executor.execute_batch(
"INSERT INTO Users (Name, Email, Age) VALUES (?, ?, ?)",
params_list,
batch_size=1000
)
print(f"插入了 {total_rows} 行")
获取数据库元数据
# 列出所有表
tables = executor.list_tables()
print("数据库中的表:", tables)
# 获取表结构
table_info = executor.get_table_info("Users")
print(table_info)
工具函数
from realsqltool.utils import list_odbc_drivers, test_connection
# 列出可用的ODBC驱动
drivers = list_odbc_drivers()
print("可用的ODBC驱动:", drivers)
# 测试连接
success, message = test_connection(
server="myserver.database.windows.net",
database="mydatabase",
username="myusername",
password="mypassword"
)
print(message)
API 文档
AzureSQLConnection
连接管理器类。
参数:
server(str): Azure SQL Server地址database(str): 数据库名称username(str, 可选): 用户名password(str, 可选): 密码driver(str): ODBC驱动名称,默认为 "ODBC Driver 17 for SQL Server"**kwargs: 其他连接参数
方法:
connect(): 建立连接disconnect(): 断开连接is_connected(): 检查连接状态get_cursor(): 获取游标(上下文管理器)
QueryExecutor
查询执行器类。
参数:
connection(AzureSQLConnection): 数据库连接实例
方法:
execute_query(query, params=None, return_type="dataframe"): 执行查询execute_scalar(query, params=None): 执行标量查询execute_non_query(query, params=None): 执行非查询语句execute_batch(query, params_list, batch_size=1000): 批量执行read_table(table_name, columns=None, where_clause=None, order_by=None, limit=None): 读取表get_table_info(table_name): 获取表结构list_tables(schema="dbo"): 列出所有表
示例
完整示例
from realsqltool import AzureSQLConnection, QueryExecutor
# 配置连接信息
config = {
"server": "myserver.database.windows.net",
"database": "mydatabase",
"username": "myusername",
"password": "mypassword"
}
# 使用上下文管理器
with AzureSQLConnection(**config) as conn:
executor = QueryExecutor(conn)
# 1. 列出所有表
tables = executor.list_tables()
print(f"数据库包含 {len(tables)} 个表")
# 2. 查询数据
df = executor.execute_query("""
SELECT TOP 10
Name,
Email,
Age
FROM Users
WHERE Age >= ?
ORDER BY Age DESC
""", params=(18,))
print(df)
# 3. 获取统计信息
avg_age = executor.execute_scalar("SELECT AVG(Age) FROM Users")
print(f"平均年龄: {avg_age:.2f}")
# 4. 更新数据
rows = executor.execute_non_query(
"UPDATE Users SET Email = ? WHERE Name = ?",
params=("newemail@example.com", "张三")
)
print(f"更新了 {rows} 行")
注意事项
- 确保已安装正确版本的ODBC驱动程序
- 对于Azure SQL Database,服务器地址通常是
<server-name>.database.windows.net - 始终使用参数化查询来防止SQL注入
- 使用上下文管理器可以确保连接正确关闭
- 大批量操作时,建议使用
execute_batch方法
许可证
MIT License
贡献
欢迎提交问题和拉取请求!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
realsqltool-0.1.0.tar.gz
(8.1 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file realsqltool-0.1.0.tar.gz.
File metadata
- Download URL: realsqltool-0.1.0.tar.gz
- Upload date:
- Size: 8.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.12.7 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d019fc2701dd743ed7a7cc352e80d05c5f3cd36211003074d94b90ddaad0b5a5
|
|
| MD5 |
e4dda05a869de2bee25ca7cd92d59c36
|
|
| BLAKE2b-256 |
088faec52ee316f814915f8c1e8634742ffa40e794788f04c682258da648c043
|
File details
Details for the file realsqltool-0.1.0-py3-none-any.whl.
File metadata
- Download URL: realsqltool-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.12.7 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f831170ece3afa4d77d263a24c5c514e85dd4c70cc76976e25bb7ae769e50314
|
|
| MD5 |
6876b9d8905c7b483fbf70f0bbddff39
|
|
| BLAKE2b-256 |
0e2dd1ba48ee875c1e2e3a5a0e37efc8c862f80e207182cf126fe6a7ed0a6c07
|