Skip to main content

Easy-to-use ORM for database operations with lazy table reflection

Project description

kepler-atlas

基于 SQLAlchemy 的 Python ORM 库,专为交互式编程(Jupyter/IPython)优化,提供更简洁的 API。

特性

  • 🚀 懒加载表反射 - 按需加载表结构,启动速度快
  • 🔤 大小写不敏感 - db.usersdb.USERSdb.Users 都能访问同一张表
  • 📊 DataFrame 集成 - 查询结果一键转为 pandas DataFrame
  • 🗄️ 多数据库支持 - MySQL、PostgreSQL、SQLite、Oracle、MSSQL 等
  • Tab 补全 - IPython/Jupyter 中自动提示表名

安装

pip install kepler-atlas

快速开始

连接数据库

from kepler.atlas import DataBase

# 方式1: 连接字符串
db = DataBase('mysql://user:pass@localhost/db')

# 方式2: SQLAlchemy Engine
from sqlalchemy import create_engine
engine = create_engine('postgresql://user:pass@localhost/db')
db = DataBase(engine)

# 方式3: 上下文管理器(自动关闭连接)
with DataBase('sqlite:///example.db') as db:
    ...

访问表

# 大小写不敏感
users = db.users
users = db.USERS
users = db.Users  # 都指向同一张表

# 列出所有表
print(db.tables)

查询

# 基本查询
db.query(db.users).all()

# 条件过滤
db.query(db.users).filter(db.users.age > 18).all()

# 返回 DataFrame
df = db.query(db.users).filter(db.users.age > 18).to_df()

# 排序、分页
db.query(db.users).order_by(db.users.id.desc()).limit(10).all()

插入

# 单条插入
user = db.users(name='Alice', email='alice@example.com')
db.update(user)
db.commit()

# 批量插入 - DataFrame
import pandas as pd
df = pd.DataFrame({
    'name': ['Alice', 'Bob'],
    'email': ['alice@example.com', 'bob@example.com']
})
db.insert(db.users, df)
db.commit()

# 批量插入 - 字典列表
data = [{'name': 'Alice'}, {'name': 'Bob'}]
db.insert(db.users, data, ignore=True)  # ignore=True 忽略重复键
db.commit()

更新

# 查询后修改
user = db.query(db.users).filter(db.users.name == 'Alice').first()
user.email = 'new@email.com'
db.commit()

# 批量更新
db.query(db.users).filter(db.users.age < 18).update({'status': 'minor'})
db.commit()

# merge(存在则更新,不存在则插入)
user = db.users(name='Alice', email='new@email.com')
db.merge(user)
db.commit()

删除

# 删除单条
user = db.query(db.users).filter(db.users.name == 'Alice').first()
db.delete(user)
db.commit()

# 批量删除
db.query(db.users).filter(db.users.status == 'inactive').delete()
db.commit()

自定义模型

from sqlalchemy import Column, Integer, String

class User(db.Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    email = Column(String(100))

db.create_all()  # 创建表

API 参考

DataBase

方法/属性 说明
DataBase(bind, schema=None) 创建数据库实例
db.tables 返回所有表名列表
db.Base 获取 automap 基类
db.query(*entities) 创建查询
db.insert(table, data, ignore=True) 批量插入
db.update(obj) 添加对象到会话
db.merge(obj) 合并对象
db.delete(obj) 删除对象
db.commit() 提交事务
db.rollback() 回滚事务
db.flush() 刷新到数据库(不提交)
db.close() 关闭连接
db.refresh() 刷新元数据

Query

方法 说明
.filter(condition) 过滤条件
.order_by(column) 排序
.limit(n) 限制数量
.offset(n) 偏移量
.all() 返回所有结果
.first() 返回第一条
.one() 返回唯一一条
.count() 计数
.to_df() 转为 DataFrame

异常

from kepler.atlas import (
    AtlasError,       # 基础异常
    TableError,       # 表操作错误
    ConnectionError,  # 连接错误
    InsertError,      # 插入错误
    ValidationError,  # 验证错误
)

交互式编程

在 IPython/Jupyter 中,Tab 补全会自动显示表名:

db = DataBase('sqlite:///example.db')
db.u<Tab>  # 显示: db.users

tables

列名也同样支持:

columns

数据库方言支持

数据库 忽略重复键方式
MySQL INSERT IGNORE
SQLite INSERT OR REPLACE
PostgreSQL ON CONFLICT DO NOTHING
Oracle /*+ IGNORE_ROW_ON_DUPKEY_INDEX */
MSSQL IGNORE_DUP_KEY

注意事项

  • ⚠️ 表必须有主键才能被 ORM 映射

License

GPL-3.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kepler_atlas-0.1.6.tar.gz (27.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kepler_atlas-0.1.6-py3-none-any.whl (26.6 kB view details)

Uploaded Python 3

File details

Details for the file kepler_atlas-0.1.6.tar.gz.

File metadata

  • Download URL: kepler_atlas-0.1.6.tar.gz
  • Upload date:
  • Size: 27.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for kepler_atlas-0.1.6.tar.gz
Algorithm Hash digest
SHA256 b3a59239f760cd5fac9b23cb9e93f833b867d269e0b2f0c7a365a31307cf205a
MD5 df1984cef929b559b89fc82b0126febf
BLAKE2b-256 eca5d774044e47fa14a451081aa7f20db367d8f0ee85618fee1fef4bb8c54199

See more details on using hashes here.

File details

Details for the file kepler_atlas-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: kepler_atlas-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 26.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for kepler_atlas-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 0db8408848401e94a6619c268844873e051775e008f7442a60f890e5c4c09f0e
MD5 c44de1ef20a5a0ad48f85674743a8dcf
BLAKE2b-256 ab40fbe8dadd688443994642131ba8266a68f28e2b1aa4671f0c3037091e1490

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page