库扩展了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第三方库


热门话题
在Maven的其他模块中看不到依赖模块中的java更改   http使用Java提交HTML表单数据,以检索从jsp应用程序下载的内容   因此,java JPA直接获取一个映射,而不是对象列表   java Dagger2:如何在多态性期间注入成员变量?   java如何在playFramework中重用控制器类的功能   java JavaMail到minecraft   java如何在RecyclerView滚动上下载更多Firebase对象?   PDFBOX org出现java Proc Groovy错误。阿帕奇。pdfbox。余弦。COSDocument finalize警告:警告:您没有关闭PDF文档   用java将英语翻译成本地语言   javascript不使用servlet将JSON对象传递给Java类   数据结构二进制搜索树泛型Java   如何在cmd中使用jar编译和执行java?   java如何用JPA连接表列?   java 2D Arraylist预测代码的输出   Java:“历史”对于cli命令,如何使输出“可编辑”?