Python中Flask与MongoDB的Models如何编写?
RT,大佬们,flask 操作 mongo 的 model 咋写,求个 demo 看看。
不用 orm 也没啥问题的吧
Python中Flask与MongoDB的Models如何编写?
5 回复
不用 orm 后期会不知不觉自己造一个 orm 出来
在Flask里用MongoDB,一般不用传统ORM那套models.py的写法。MongoDB是文档数据库,直接用它的Python驱动(比如pymongo)或者用Flask-PyMongo这样的扩展更直接。
给你个最常用的方案,用Flask-PyMongo:
from flask import Flask
from flask_pymongo import PyMongo
app = Flask(__name__)
app.config['MONGO_URI'] = 'mongodb://localhost:27017/mydatabase'
mongo = PyMongo(app)
# 这就是你的"Model"操作了
class User:
@staticmethod
def create(name, email):
return mongo.db.users.insert_one({'name': name, 'email': email})
@staticmethod
def find_by_email(email):
return mongo.db.users.find_one({'email': email})
@staticmethod
def update_email(user_id, new_email):
return mongo.db.users.update_one(
{'_id': user_id},
{'$set': {'email': new_email}}
)
# 使用示例
user_id = User.create('张三', 'zhangsan@example.com')
user = User.find_by_email('zhangsan@example.com')
如果你想要更像传统ORM的写法,可以考虑mongoengine:
from flask import Flask
from mongoengine import Document, StringField, connect
app = Flask(__name__)
connect('mydatabase', host='localhost', port=27017)
class User(Document):
name = StringField(required=True)
email = StringField(required=True, unique=True)
@classmethod
def create_user(cls, name, email):
user = cls(name=name, email=email)
user.save()
return user
# 使用
user = User.create_user('李四', 'lisi@example.com')
found = User.objects(email='lisi@example.com').first()
总结建议:直接用Flask-PyMongo操作更符合MongoDB的灵活特性。
看看 mongoengine
是可以不用 但是为什么不用呢 我发现不用 ORM 我完全不会写。。。哈哈哈哈

