库扩展了sqlalchemy模块,使crud更加容易。

sqlalchemy-mate的Python项目详细描述


Documentation Statushttps://travis-ci.org/MacHu-GWU/sqlalchemy_mate-project.svg?branch=masterhttps://codecov.io/gh/MacHu-GWU/sqlalchemy_mate-project/branch/master/graph/badge.svghttps://img.shields.io/pypi/v/sqlalchemy_mate.svghttps://img.shields.io/pypi/l/sqlalchemy_mate.svghttps://img.shields.io/pypi/pyversions/sqlalchemy_mate.svghttps://img.shields.io/badge/STAR_Me_on_GitHub!--None.svg?style=social
https://img.shields.io/badge/Link-Document-blue.svghttps://img.shields.io/badge/Link-API-blue.svghttps://img.shields.io/badge/Link-Source_Code-blue.svghttps://img.shields.io/badge/Link-Install-blue.svghttps://img.shields.io/badge/Link-GitHub-blue.svghttps://img.shields.io/badge/Link-Submit_Issue-blue.svghttps://img.shields.io/badge/Link-Request_Feature-blue.svghttps://img.shields.io/badge/Link-Download-blue.svg

欢迎使用sqlalchemy_mate文档

一个扩展sqlalchemy模块的库,可以让你节省50%的数据库。

功能

Read Database Credential Safely

将数据库连接凭据放在源代码中总是一个坏主意

sqlalchemy_mate提供了几个选项,允许轻松加载凭据。

如果您想从其他源(例如具有大量export DB_PASSWORD="xxx"、aws secret manager、aws密钥管理系统(kms)的bash脚本)读取db secret,请查看我的另一个项目pysecret

From json file

您可以将凭证放在$home目录中的某个json文件中,然后让sqlalchemy_mate智能地从中加载。

您需要指定两件事:

  1. json文件的路径。
  2. 数据的字段路径。如果connect信息深深地嵌套在json中,则可以使用点表示法json path来指向它。

json的内容:

{"credentials":{"db1":{"host":"example.com","port":1234,"database":"test","username":"admin","password":"admin",},"db2":{...}}}

代码:

fromsqlalchemy_mateimportEngineCreatorec=EngineCreator.from_json(json_file="path-to-json-file",json_path="credentials.db1",# dot notation json path)engine=ec.create_postgresql_psycopg2()

默认数据字段hostportdatabaseusernamepassword

如果json模式不同,则需要将key_mapping添加到指定字段名映射

ec=EngineCreator.from_json(json_file="...",json_path="...",key_mapping={"host":"your-host-field","port":"your-port-field","database":"your-database-field","username":"your-username-field","password":"your-password-field",})
From ^{tt2}$

您可以将大量数据库连接信息放在.db.json文件的$HOME目录中。

fromsqlalchemy_mateimportEngineCreatorec=EngineCreator.from_home_db_json(identifier="db1")engine=ec.create_postgresql_psycopg2()

$HOME/.db.json采用平面json模式,但可以使用点表示法json path for identifier来适应任何json模式:

{"identifier1":{"host":"example.com","port":1234,"database":"test","username":"admin","password":"admin",},"identifier2":{...}}
From json file on AWS S3

这类似于from_json,但是json文件存储在aws s3上。

fromsqlalchemy_mateimportEngineCreatorec=EngineCreator.from_s3_json(bucket_name="my-bucket",key="db.json",json_path="identifier1",aws_profile="my-profile",)engine=ec.create_redshift()
From Environment Variable

您可以将凭证放入环境变量中。例如:

exportDB_DEV_HOST="..."exportDB_DEV_PORT="..."exportDB_DEV_DATABASE="..."exportDB_DEV_USERNAME="..."exportDB_DEV_PASSWORD="..."
fromsqlalchemy_mateimportEngineCreator# read from DB_DEV_USERNAME, DB_DEV_PASSWORD, ...ec=EngineCreator.from_env(prefix="DB_DEV")engine=ec.create_redshift()

如果您想从云安全地读取数据库凭据,例如aws ec2、aws lambda,可以使用aws kms来解密您的凭据

# leave aws_profile=None if you are on cloudec=EngineCreator.from_env(prefix="DB_DEV",kms_decrypt=True,aws_profile="xxx")engine=ec.create_redshift()

Smart Insert

在批量插入中,如果某些行有主键冲突,经典的解决方案是:

forrowindata:try:engine.execute(table.insert(),row)exceptsqlalchemy.sql.IntegrityError:pass

它就像是一个接一个的插入,非常慢。

sqlalchemy_mate使用smart_insert策略尝试较小的大容量插入,这样工作的可能性更高。结果,提交的总数大大减少。

使用SQL表达式:

fromsqlalchemy_mateimportinsertingengine=create_engine(...)t_users=Table("users",metadata,Column("id",Integer),...)# lots of datadata=[{"id":1,"name":"Alice}, {"id": 2, "name": "Bob"}, ...]# the magic functioninserting.smart_insert(engine,t_users,data)

使用ORM:

fromsqlalchemy_mateimportExtendedBaseBase=declarative_base()classUser(Base,ExtendedBase):# inherit from ExtendedBase...# lots of usersdata=[User(id=1,name="Alice"),User(id=2,name="Bob"),...]# the magic methodUser.smart_insert(engine_or_session,data)# That's it

Smart Update / Upsert

按主键自动更新值。

# in SQL expression#fromsqlalchemy_mateimportupdatingdata=[{"id":1,"name":"Alice}, {"id": 2, "name": "Bob"}, ...]updating.update_all(engine,table,data)updating.upsert_all(engine,table,data)# in ORM#data=[User(id=1,name="Alice"),User(id=2,name="Bob"),...]User.update_all(engine_or_session,user_list)User.upsert_all(engine_or_session,user_list)

安装

sqlalchemy_mate在pypi上发布,所以您只需要:

$ pip install sqlalchemy_mate

要升级到最新版本:

$ pip install --upgrade sqlalchemy_mate

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何使用SeleniumWebDriver捕获特定元素的屏幕截图而不是整个页面?   WAS 8.5中的java JAXWS异步IO异常   java Android Studio无法解析数组适配器中的符号项   swing Java在运行时添加和删除按钮   java Spring Boot 2.0。x禁用特定配置文件的安全性   java这是我的最后一个代码,我在“if(Users[B].substring(0,1)==“1”){//Find String Cut Char Function”上遇到错误   单击菜单选项后打开“活动”时发生java错误   java Tic Tac Toe NullPointerException   java如何做数学题。随机进入for循环   java Http状态404错误处理spring mvc   java循环依赖双向@OneToMany JPA关系   java我可以在不重新启动项目的情况下添加servlet吗   java在蓝色/绿色部署中如何管理共享数据库?   这是一个系统。currentTimeMillis()是Java中时间性能的最佳度量?