我希望使用NoSQL后端和基于Python的开源框架构建REST来构建API。这个API将运行在云环境中,其目标是实现云无关,并且能够部署到任何地方。它必须对后端数据库技术有一定的抽象。我发现Django REST框架正是我所要寻找的,但是Django ORM只支持RDBMS。为了在Django中启用NoSQL支持,似乎已经开发了一些开源包,但这些项目已经被放弃。
我知道从技术上讲,在Django REST框架中使用Amazon或Azure是可能的,但由于它没有得到官方支持,它听起来似乎需要定制代码并偏离标准配置才能工作。
发布于 2022-08-19 22:55:05
运行Django + MongoDB是可能的,但这不是一个好主意。
主要原因是Django没有官方支持Mongodb。有一个名为Djongo的包,它非常不可靠且未完成,允许您使用Django的ORM,但是有很多缺陷。你可以检查一下github存储库中的问题数量。
相反,您可以使用PyMongo将django与mongodb连接起来,但请记住,您必须认真地执行查询。
此外,在处理django中的不同数据库方面,我已经做了这样的事情,但是在Postgres和mongodb中,您必须创建一个路由器类来管理连接。
在我看来,我会使用FastAPI并查看一下它几乎与Flask相似,但显然有更好的方法来创建API。
发布于 2022-08-19 18:47:13
我会用烧瓶+ mongodb
发布于 2022-08-26 09:41:13
因此,Django不支持NOSQL数据库的抽象。实际上,它有一个内部对象关系Mapper (ORM)库来解释真实代码中的对象-- SQL数据库。
您需要的是一个对象数据映射器(ODM),因为NOSQL数据库由原始数据组成,比如基于文档的MongoDB。
根据我的经验,几个月前,我使用这个python (https://github.com/MatteoGuadrini/nosqlapi - https://nosqlapi.readthedocs.io/en/latest/)构建了一个特定抽象的库,用于处理云中的数据库。
在您的示例中,您应该基于文档数据库(如MongoDB或CouchDB )构建模块,然后将其部署到云帐户中。
在这里,您可以找到一个基于MongoDB:docdb.py的文档数据库的示例(测试)
如果您跟随我,就开始创建以下类:
import nosqlapi.docdb
# MongoDB like database
class MongoConnection(nosqlapi.docdb.DocConnection):...
class MongoSession(nosqlapi.docdb.DocSession):...
class MongoResponse(nosqlapi.docdb.DocResponse):...
class MongoBatch(nosqlapi.docdb.DocBatch):...
class MongoSelector(nosqlapi.docdb.DocSelector):...这样,您就可以使用所需的数据库:
# Use MongoDB library
conn = MongoConnection(host='server.local', username='admin', password='pass')
sess = conn.connect() # return MongoSession object
# Create a new database
conn.create_database('new_db')
# CRUD operation
C = sess.insert(path='db/doc1', doc={"_id": "5099803df3f4948bd2f98391", "name": "Arthur", "age": 42}) # Create
R = sess.get(path='db/doc1') # Read
U = sess.update(path='db/doc1', doc={"_id": "5099803df3f4948bd2f98391", "name": "Arthur", "age": 43}, rev=2) # Update
D = sess.delete(path='db/doc1', rev=2) # Delete
print(R) # {"_id": "5099803df3f4948bd2f98391", "rev"= 2, "name": "Arthur", "age": 42}
print(type(R)) # <class 'MongoResponse'>
print(isinstance(R, nosqlapi.Response)) # True
# Extended CRUD operations
sess.insert_many(database='db', docs=[{"_id": "5099803df3f4948bd2f98391", "name": "Arthur", "age": 42},
{"_id": "5099803df3f4948bd2f98392", "name": "Arthur", "age": 43}])
sess.update_many(database='db', docs=[{"_id": "5099803df3f4948bd2f98391", "name": "Arthur", "age": 42, "rev": 2},
{"_id": "5099803df3f4948bd2f98392", "name": "Arthur", "age": 43, "rev": 2}])
# Complex select operation
sel = MongoSelector(selector={"name": "Arthur"}, fields=['_id', 'name', 'age'], limit=2)
sess.find(sel)此外,库有一组很好的ODM对象来将您的代码映射到数据库:https://nosqlapi.readthedocs.io/en/latest/build.html#odm-classes,例如Mongo文档和PermissionDocuments .
在我看来,这是最好的办法。
此外,通过在google上搜索,我看到正在讨论如何使这个库成为一个真正的标准:https://discuss.python.org/t/request-for-comment-making-pep-for-nosql-databases/14772。
https://stackoverflow.com/questions/73421051
复制相似问题