封尘网

让学习成为一种习惯!

Flask对mongodb的简单增删改查

Flask-PyMongo 架起来 Flask 和 PyMongo 之间的桥梁,因此你能够使用 Flask 正常的机制去配置和连接 MongoDB。

根据官方的示例,并做一些简单的修改实现增、删除、改查的操作。

系统:Windows10
Python版本:python-3.5.2
Pycharm:4.0.7

特别说明:因为之前使用的flask是1.0以下的版本,所以使用Flask-PyMongo插件的方式跟现在新版本1.0以上的Flask就有所区别了。

如果遇到以下情况不能实现示例,请修改一下配置即可。

C:\Python35\python.exe C:/Users/Administrator/PycharmProjects/blog/blog.py 
Traceback (most recent call last): 
  File "C:/Users/Administrator/PycharmProjects/blog/blog.py", line 12, in <module> 
    mongo = PyMongo(app) 
  File "C:\Python35\lib\site-packages\flask_pymongo\__init__.py", line 116, in __init__ 
    self.init_app(app, uri, *args, **kwargs) 
  File "C:\Python35\lib\site-packages\flask_pymongo\__init__.py", line 146, in init_app 
    "You must specify a URI or set the MONGO_URI Flask config variable", 
ValueError: You must specify a URI or set the MONGO_URI Flask config variable

解决方法,就是要加入一个参数MONGO_URI 可以加到config.py 中,也可以在主程序中加入。

详情可看官方文档:

https://flask-pymongo.readthedocs.io/en/latest/

以下示例操作时使用的Flask版本为0.8的。

通过Pycharm创建一个FLask项目,因为我这里是加入了本地的git仓库,所以颜色有点变化。

index.html文件没有做任何的修改,因为这里还没有添加其它的CSS,JS暂时只做一个返回数据用。

config.py 配置文件,这里仅记录一些数据库配置。

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# @Time    : 2017/9/21 08:19 
# @Author  : Swper 
# @Site    : http://www.58jb.com/ 
# @File    : config.py 
# @Software: PyCharm 

#MONGODB CONFIG 
class MongoDB(): 
    MONGO_HOST = "127.0.0.1" 
    MONGO_PORT = 27017 
    MONGO_DBNAME = "blog"

主程序:blog.py

from flask import Flask,render_template 
from flask_pymongo import PyMongo 
from config import MongoDB 

app = Flask(__name__) 
#实例化数据库配置,可以直接一行解决
mongo = PyMongo(app) 

#也可以两行来实例化配置,这里会把所有以MONGO开头的配置加入。

# app.config.from_object(MongoDB) 
# mongo.init_app(app,config_prefix="MONGO%") 

@app.route('/') 
def index(): 
    # 测试数据库是否连接成功,如果成功就会返回Pymongo一个游标对象。
    onlines_users = mongo.db.system.users.find() 
    return render_template('index.html',onlines_usersonlines_users=onlines_users) 
#如果想在Index.html文件里显示效果就要加入{{ onlines_users }}调用方法。

#插入数据[这里指定了数据]
@app.route('/add/')          #后面加入了一个"/"作用跟不加的效果自己可以测试。
def add(): 
    user = mongo.db.users 
    user.insert({"username":"swper","password":"123456"}) 
    if  user: 
        return "用户已经存在!" 
    else: 
        return "Added User!" 

#查询数据,通过后面的<username>传入要查询的用户名 
@app.route('/find/<username>') 
def find(username): 
    user = mongo.db.users 
    userusername = user.find_one({"username":username}) 
    if username: 
        return "你查找的用户名:" + username["username"] + " 密码是:" + username["password"] 
    else: 
        return "你查找的用户并不存在!" 

#更新数据[monogodb版本可能有所不同] 
@app.route('/update/<username>') 
def update(username): 
    user = mongo.db.users 
    passwd = "abcd10023" 
    userusername = user.find_one({"username":username}) 
    username["password"] = passwd 
    user.save(username) 
    return "Update OK " + username["username"] 

#删除数据 
@app.route('/delete/<username>') 
def delete(username): 
    user = mongo.db.users 
    userusername = user.find_one({"username":username}) 
    user.remove(username) 
    if username: 
        return "Remove " + username["username"] + " Ok!" 
    else: 
        return "用户不存在,请核对后再操作!" 


if __name__ == '__main__': 
    app.run(debug=True)

方法:

1、当访问地址:http://127.0.0.1:5000/add/

就会把blog.py里的用户 ({“username”:”swper”,”password”:”123456”})插入到数据库中,如果用户存在就会提示已经存在。

2、当访问地址:http://127.0.0.1:5000/find/swper

后在的”swper”为用户名,就会查询出它的用户名,和密码。

3、当访问地址为:http://127.0.0.1:5000/update/swper

就会把update函数里的passwd = “abcd10023” 更新给用户swper。

4、当访问地址为:http://127.0.0.1:5000/delete/swper

就会把用户”swper”从数据库中删除,如果用户不存在就会报不存在。

而 Flask-PyMongo 官方上有示例处理,错误并返回一个404状态。http://www.pythondoc.com/flask-pymongo/

我们根据自己状态修改:

查询数据,通过后面的传入要查询的用户名

@app.route('/find/<username>') 
def find(username): 
    username = mongo.db.users.find_one_or_404({"username":username}) 
    return render_template('index.html',usernameusername=username)