2026-01-25 12:53:16 +08:00
2026-01-25 12:53:16 +08:00
2026-01-25 12:53:16 +08:00
2026-01-25 12:53:16 +08:00

MySQL Wrapper Project - New SQL (NSQL)

A lightweight, thread-safe Python wrapper for PyMySQL with enhanced features.

Python MySQL PyMySQL

Table of Contents

Advantages

Compared to Other MySQL Wrappers

✔ Thread Safety - Built-in threading lock mechanism
✔ SQL Injection Protection - Strict identifier validation
✔ Automatic Type Conversion - Smart result type handling
✔ Flexible Parameter Binding - Supports both tuple and dict parameters
✔ Connection Resilience - Automatic reconnection handling
✔ Debug Mode - Detailed SQL logging for development

Technical Principles

Transaction Handling

  • Uses PyMySQL's native transaction support
  • Automatic COMMIT after each successful operation
  • Manual transaction control available through raw connection

Connection Pool

  • Not a traditional connection pool
  • Single persistent connection with thread locking
  • Lightweight alternative for moderate workloads
  • Suitable for long-running applications

Features

Core Features

  • Parameterized query building
  • Automatic FROM clause completion
  • JSON data type support
  • Binary data handling utilities
  • Debug mode with SQL logging
  • Dictionary-style result formatting

Security Features

  • SQL injection prevention
  • Strict identifier validation
  • Proper string escaping
  • Parameter separation from queries

API Reference

Main Classes

MySQL(host, port, charset="utf8", debug=False)

Main wrapper class constructor.

NewCursor(parent)

Cursor class with enhanced methods.

Core Methods

Method Description Parameters
use(db, Table=None) Switch database db: database name
select(_Table, FROM=None, WHERE=None, _limit=None) Basic SELECT _Table: columns to select
selectashead(_Table, FROM=None, WHERE=None, _limit=None) Dict-style results Same as select
insert(_Table, values=None, WHERE=None, **k) INSERT operation Supports dict or kwargs
update(WHERE, FROM=None, **k) UPDATE operation WHERE clause required
delete(FROM=None, WHERE=None) DELETE operation
istrue(FROM=None, WHERE=None) Existence check Returns boolean

Helper Functions

Function Description Example
Func.NOW() Current timestamp Func.NOW()
Func.JSON_ARRAY() JSON array builder Func.JSON_ARRAY(1,2,3)
Func.insertbytes() Binary data handler Func.insertbytes(b'data')

Usage Examples

Basic Usage

db = MySQL('localhost', 3306, debug=True)
db.__login__('user', 'password')
cursor = db.NewCursor()

# Select example
cursor.use('mydb', 'users')
results = cursor.select('*', WHERE=('age > %s', (18,)), _limit=10)

# Insert example
cursor.insert('users', {'name': 'John', 'age': 25})

# Transaction example
try:
    cursor.update(WHERE=('id=%s', (1,)), FROM='users', balance=100)
    cursor.update(WHERE=('id=%s', (2,)), FROM='users', balance=200)
except:
    cursor.conn.rollback()

Advanced Features

# Binary data insertion
cursor.insert('files', {
    'name': 'data.bin',
    'content': Func.insertbytes(b'\x00\x01\x02')
})

# JSON data handling
cursor.insert('config', {
    'settings': Func.JSON_ARRAY('item1', 'item2')
})

# Dictionary-style results
users = cursor.selectashead('*', FROM='users')
for user in users:
    print(user['name'], user['age'])

Limitations

❌ High-concurrency applications (consider connection pool)
❌ Complex transaction scenarios
❌ ORM-like object mapping
❌ Asynchronous applications

Performance Considerations

  • Single connection model may bottleneck under heavy load
  • Not optimized for bulk operations
  • Type conversion adds minor overhead

Comparison with Other Projects

Feature This Wrapper PyMySQL SQLAlchemy Django ORM
Thread Safety ✔ ✖ ✔ ✔
Connection Pool ✖ ✖ ✔ ✔
ORM Features ✖ ✖ ✔ ✔
SQL Building ✔ ✖ ✔ ✔
Binary Support ✔ ✔ ✔ ✔
Debug Mode ✔ ✖ Partial Partial

MySQL 封装项目 - New SQL (NSQL)

一个轻量级、线程安全的 PyMySQL Python 封装器,具有增强功能。

Python MySQL PyMySQL

目录

优势

与其他MySQL封装器的比较

✔ 线程安全 - 内置线程锁机制
✔ SQL注入防护 - 严格的标识符验证
✔ 自动类型转换 - 智能结果类型处理
✔ 灵活参数绑定 - 支持元组和字典参数
✔ 连接弹性 - 自动重连处理
✔ 调试模式 - 详细的SQL日志记录

技术原理

事务处理

  • 使用PyMySQL原生事务支持
  • 每次成功操作后自动提交COMMIT
  • 可通过原始连接手动控制事务

连接池

  • 非传统连接池
  • 带线程锁的单一持久连接
  • 适用于中等工作负载的轻量级方案
  • 适合长期运行的应用程序

功能特性

核心功能

  • 参数化查询构建
  • 自动FROM子句补全
  • JSON数据类型支持
  • 二进制数据处理工具
  • 带SQL日志记录的调试模式
  • 字典式结果格式化

安全特性

  • SQL注入预防
  • 严格标识符验证
  • 正确的字符串转义
  • 查询与参数分离

API参考

主要类

MySQL(host, port, charset="utf8", debug=False)

主封装类构造函数

NewCursor(parent)

带增强方法的游标类

核心方法

方法 描述 参数
use(db, Table=None) 切换数据库 db: 数据库名
select(_Table, FROM=None, WHERE=None, _limit=None) 基础SELECT _Table: 选择列
selectashead(_Table, FROM=None, WHERE=None, _limit=None) 字典式结果 同select
insert(_Table, values=None, WHERE=None, **k) INSERT操作 支持字典或关键字参数
update(WHERE, FROM=None, **k) UPDATE操作 必须包含WHERE子句
delete(FROM=None, WHERE=None) DELETE操作
istrue(FROM=None, WHERE=None) 存在性检查 返回布尔值

辅助函数

函数 描述 示例
Func.NOW() 当前时间戳 Func.NOW()
Func.JSON_ARRAY() JSON数组构建器 Func.JSON_ARRAY(1,2,3)
Func.insertbytes() 二进制数据处理 Func.insertbytes(b'data')

使用示例

基础用法

db = MySQL('localhost', 3306, debug=True)
db.__login__('user', 'password')
cursor = db.NewCursor()

# 查询示例
cursor.use('mydb', 'users')
results = cursor.select('*', WHERE=('age > %s', (18,)), _limit=10)

# 插入示例
cursor.insert('users', {'name': '张三', 'age': 25})

# 事务示例
try:
    cursor.update(WHERE=('id=%s', (1,)), FROM='users', balance=100)
    cursor.update(WHERE=('id=%s', (2,)), FROM='users', balance=200)
except:
    cursor.conn.rollback()

高级功能

# 二进制数据插入
cursor.insert('files', {
    'name': 'data.bin',
    'content': Func.insertbytes(b'\x00\x01\x02')
})

# JSON数据处理
cursor.insert('config', {
    'settings': Func.JSON_ARRAY('item1', 'item2')
})

# 字典式结果
users = cursor.selectashead('*', FROM='users')
for user in users:
    print(user['name'], user['age'])

局限性

不推荐场景

❌ 高并发应用(考虑连接池方案)
❌ 复杂事务场景
❌ 类ORM的对象映射
❌ 异步应用

性能考量

  • 单连接模型在重负载下可能成为瓶颈
  • 未针对批量操作优化
  • 类型转换会增加少量开销

与其他项目的对比

特性 NSQL PyMySQL SQLAlchemy Django ORM
线程安全 ✔ ✖ ✔ ✔
连接池 ✖ ✖ ✔ ✔
ORM功能 ✖ ✖ ✔ ✔
SQL构建 ✔ ✖ ✔ ✔
二进制支持 ✔ ✔ ✔ ✔
调试模式 ✔ ✖ 部分 部分
S
Description
Deprecated Python-to-SQL compatibility program, can be completely replaced by ORM
Readme
36 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 100%