用于增强的SQL。
ezrecords的Python项目详细描述
ezrecords是一个非常简单但功能强大的用于生成原始sql的库 查询大多数关系数据库。
ezrecords=kenneth reitz的records+justin文森特的ezsql+wordpress'wpdb-SQLAlchemy。
只需编写sql。没有铃铛,没有口哨。这个常见的任务可以是 使用现有的标准工具非常困难。 这个库力求使这个工作流尽可能简单, 同时提供一个优雅的接口来处理查询结果。
数据库支持包括sqlite、postgres和mysql(不包括驱动程序)。
为什么?
用法
api
importloggingfromezrecords.mysqldbimportMySQLDblogger=logging.getLogger()# connectdb=MySQLDb(db_url="mysql://root:passwd@127.0.0.1:3306/test",logger=logger)# logger is optional# enable debugging - optionaldb.save_queries=True# save queries and execution timedb.show_sql=True# show SQL code being executed. logger above is required for logging to workdb.show_errors=True# show errorscreate_user_table=""" CREATE TABLE test_user ( id INT AUTO_INCREMENT NOT NULL, username varchar(255) UNIQUE, password varchar(255), created_at TIMESTAMP, created_at_gmt TIMESTAMP, PRIMARY KEY(id) ) """db.query(create_table)# run generic SQLcreate_numbers_table=""" DROP TABLE IF EXISTS numbers; CREATE TABLE numbers( ints int, floats float ); """db.query(create_table_sql)insert_numbers_sql="INSERT INTO numbers (ints, floats) VALUES (%d, %f)"# DB API only accepts %s, so we replace %d and %f by %s internallydb.query(insert_numbers_sql,3,3.14)# run generic queries with params# insert recordsdb.insert('test_user',username='scott',password='tiger',created_at=datetime.datetime.now())db.insert('test_user',{'username':'JONES','password':'STEEL'})# bulk_insert recordsdb.bulk_insert('test_user',('username','password'),[('scott','tiger'),('JONES','STEEL')])# Update recordsdb.update('test_user',{'password':'shepard'},{'username':'scott'})# Delete recordsdb.delete('test_user',{'username':None})# None is converted to NULL# Sanitize querydb.prepare("""INSERT INTO postmeta (post_id, meta_key, meta_value) VALUES ( '%d', "%s", %%s )')""",10,"Harriet's Adages","WordPress' database interface is like Sunday Morning: Easy.")# Call stored proceduresdb.call_procedure('adds',1,2)# Get single variable/valuedb.get_var('SELECT version()')# Get specific row from many resultsdb.get_row('SELECT * FROM test_user',row_offset=1)# if offset not given the first row is returned# Get specific column from many resultsdb.get_col('SELECT username, password FROM test_user',column_offset='password')# offset can be numeric too# Get results in specific formatdb.get_results('SELECT username, password FROM test_user','json')# Get last inserted ID from AUTO_INCREMENT/SERIAL fieldsdb.insert('test_user',username='scott',password='tiger',created_at=datetime.datetime.now())db.last_insert_id# Get number of affected rows from previus querydb.delete('test_user')db.affected_rows# Switch to another databasedb.use('information_schema')# Check query timing# execute long running querydb.last_query_elapsed_time# Transactions# ---db.begin_transaction()db.commit()# or db.rollback()# Data exportrows=db.query('SELECT * FROM table')rows.datasetrows.export('csv')# yaml, json, xls, xlsx# Goodiesdb.db_version()# get server versiondb.exists('table')# check if table existsdb.get_table_names()# get list of tables in databasedb.flush()# clear cache results
cli
ezrecords -h ezrecords "SELECT version() AS version""json" --url="mysql://root:passwd@127.0.0.1:3306/test" ezrecords "SELECT version() AS version""json" --url="postgres://postgres:passwd@127.0.0.1:5432/test" ezrecords "SELECT sqlite_version() AS version""json" --url="sqlite:///:memory:"
下载并安装
在pypi上提供该模块之前,您可以安装该模块 直接从Github获取,带有:
pip install -egit+https://github.com/dareenzo/ezrecords@master#egg=ezrecords
ezrecords使用python 2.7和3.5运行。
文档生成
# edit documentation in _docs cd _docs make singlehtml cd .. cp -fR _docs/_build/singlehtml/* docs/
版权和许可证
根据麻省理工学院的许可证,代码和文档是可用的。
有关详细信息,请参见LICENSE文件。
#更改日志
有关所有发行版的完整视图,请访问github上的发行版页面: [https://github.com/dareenzo/ezrecords/releases](https://github.com/dareenzo/ezrecords/releases)
##V0.3.0-2018年5月12日
功能:
- 增加了对sqlite的支持
##V0.2.0-2017年5月27日
功能:
- 批量插入:db.bulk_insert('test_user',('username','password'),[('scott','tiger'),('jones','steel')])
修复:
- 改进文档
- 更新基本记录库代码
- 修复了将参数传递给查询时出现的错误
- 按照标准RFC中的定义开始取消用户名和密码的引用
##V0.1.0-2017-01-07
- 初始版本