Skip to main content

a simple sanic extension for using motor

Project description

sanic-mongo
====================

sanic的mongodb异步工具,灵感来源自 `官方例子 <https://github.com/channelcat/sanic/blob/master/examples/sanic_motor.py).是[motor](https://motor.readthedocs.io/en/stable/tutorial-asyncio.html>`_ 的封装,
目的只是为了简化操作.

更新
-----------------------

* v1.7.1 修正了mongo连接权限可能引发的问题,现在可以配置每个连接是否是只能连database,默认为False.{"uri":xxxx,"only_db":True}
* v1.6.0 修正了验证无法通过的问题
* v1.5.0 将接口调整至和sanic-aioorm一致.



特点 Features
-------------------------

* `motor <https://motor.readthedocs.io/en/stable/tutorial-asyncio.html>`_ 支持的操作都支持
* 支持3.5版本以上的
* 支持多数据库
* 支持mongodb和gridfs



依赖 Requirements
-----------------------------
1. motor>=1.1
2. pymongo>=3.4.0
3. sanic>=0.4.1


安装 Installation
--------------------------

- ``pip install sanic-mongo``


用法
----------------------------

mongo需要给`app.config`设置关键字`MONGO_URIS`,它是一个由mongodb名字和url组成的字典.
同时也可以使用`Mongo.SetConfig(app,**kws)`来注册kws的内容到`MONGO_URIS`.
而使用的时候可以访问`app.mongo[mongodb名字]`访问对应的db

gridfs与之类似,只是关键字是`GRIDFS_SETTINGS`,而访问需要使用`app.GridFS[GridFS名字]`


例子 Example
-----------------------------------

1. mongodb

.. code:: python
from sanic import Sanic
from sanic.response import json
from sanic_mongo import Mongo

app = Sanic(__name__)
mongo_uri = "mongodb://{host}:{port}/{database}".format(
database='test',
port=27017,
host='localhost'
)

Mongo.SetConfig(app,test=mongo_uri)
Mongo(app)

@app.get('/objects')
async def get(request):
docs = await app.mongo['test'].test_col.find().to_list(length=100)
for doc in docs:
doc['id'] = str(doc['_id'])
del doc['_id']
return json(docs)


@app.post('/objects')
async def new(request):
doc = request.json
print(type(app.mongo['test']))
object_id = await app.mongo['test']["test_col"].save(doc)
return json({'object_id': str(object_id)})


if __name__ == "__main__":
app.run(host='127.0.0.1', port=8000,debug=True)




2. gridfs

.. code:: python

from sanic import Sanic
from sanic.response import json,text
from sanic_mongo import GridFS

app = Sanic(__name__)
mongo_uri = "mongodb://{host}:{port}/{database}".format(
database='test',
port=27017,
host='localhost'
)

GridFS.SetConfig(app,test_fs=(mongo_uri,"fs"))
GridFS(app)

@app.get('/pics')
async def get(request):
cursor = app.GridFS["test_fs"].find()
result = [{i._id:i.name} async for i in cursor]
return json({"result":result})


@app.post('/pics')
async def new(request):
doc = request.files.get('file')

async with app.GridFS["test_fs"].open_upload_stream(filename=doc.name,
metadata={"contentType": doc.type}) as gridin:

object_id = gridin._id
await gridin.write(doc.body)

return json({'object_id': str(object_id)})


if __name__ == "__main__":
app.run(host='127.0.0.1', port=8000,debug=True)

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

sanic-mongo-1.7.1.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

sanic_mongo-1.7.1-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file sanic-mongo-1.7.1.tar.gz.

File metadata

  • Download URL: sanic-mongo-1.7.1.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for sanic-mongo-1.7.1.tar.gz
Algorithm Hash digest
SHA256 05a8cf3896c4f0cf59a0468ab8827f4e9d7124d46eec19c6d14379354722882e
MD5 731b46ceede74b7f4451e3cd2bb9996e
BLAKE2b-256 f893fdc45518391ef341b185a4e4b94307f39eeeb2cf32fa5ec80190490d460c

See more details on using hashes here.

File details

Details for the file sanic_mongo-1.7.1-py3-none-any.whl.

File metadata

File hashes

Hashes for sanic_mongo-1.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 db7a4fa40dc53fdf13057d92087502e65a48fa9f6a7ac132d990ee8b604f3319
MD5 69e9962f05edaedd2e70cdbd48b3b94a
BLAKE2b-256 02324b79911d7595ab2982be864b91fc874ce6d845522babf3c5beaa8ff20367

See more details on using hashes here.

Supported by

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