Flask与数据库
Flask应用中的外部脚本
Flask-Script是一个可以在flask应用外部编写脚本的扩展。
常用功能:
运行一个开发的服务器
Python shell 中操作数据库
命令行任务
安装: pip install flask-script
查看安装情况: pip list
示例:
app.py:
from flask import Flask
app = Flask(__name__)
@app.route(‘/’)
def hello_world():
return ‘Hello World !’
if __name__ == ‘__main__’:
app.run()
manage.py(外部脚本文件):
from flask_script import Manager
from app import app #导入我们创建的flask应用实例
import sqlite3 #导入sqlite3
from models import User
manager = Manager(app) #创建manager的实例
@manager.command
def hello():
print “hello world”
#传参
@manager.option(‘-m’, ‘--msg’, dest=’msg_val’, default=’world’)
def hello_world(msg_val):
print ‘hello ’ + msg_val
#初始化数据库 执行: python manage.py init_db
@manager.command
def init_db():
sql = ‘create table user (id INT, name TEXT)’
conn = sqlite3.connect(“test.db”)
cursor = conn.cursor()
cursor.execute(sql)
conn.commit()
cursor.close()
conn.close()
#操作数据库
@manager.command
def save():
user = User(1, ‘feiniu’)
user.save()
@manager.command
def query_all():
users = User.query()
for user in users:
print user
#运行脚本 python manage.py save
#运行脚本 python manage.py query_all
输出:1- - name: feiniu
if __name__ == “__main__”
manager.run()
在命令符中运行: python manage.py hello
è hello world
在命令符中运行: python manage.py hello_world
è hello world
在命令符中运行: python manage.py hello_world –m feiniuchongtian
è hello feiniuchongtian
models.py(操作数据库文件):
import sqlite3
def get_conn():
return sqlite3.connect(“test.db”)
class User(object):
def __init__(self, id, name):
self.id = id
self.name = name
#保存
def save(self):
sql = ‘insert into user VALUES (?,?)’
conn = get_conn()
cursor = conn.cursor()
cursor.execute(sql, (self.id, self.name))
conn.commit()
corsor.close()
conn.close()
#查询
@staticmethod
def query():
sql = ‘select * from user’
conn = get_conn()
cursor = conn.cursor()
rows = cursor.execute(sql)
users = []
for row in rows:
user = User(row[0], row[1])
users.append(user)
conn.commit()
cursor.close()
conn.close()
return users
def __str__(self):
return ‘id:{} – name:{}’.format(self.id, self.name)
在Flask 应用中使用 MySQL
MySQL驱动
MySQL-python
MySQL Connector
PyMySQL
实例:(在操作之前必须先安装好MySQL数据库)
建表文件 mysql.sql:
CREATE TABLE ‘feiniu’.’user’ (
‘user_id’ INT NOT NULL,
‘user_name’ VARCHAR(45) NULL,
PRIMARY KEY (‘user_id’))
ENGINE = InnoDB;
脚本文件 manage.py:
# encoding = utf-8
from flask_script import Manager
from app import app
from models import User
manager = Manager(app)
#执行命令:python manage.py save
@manager.command
def save():
user = User(1, ‘feiniu01’)
user.save()
#执行查询命令:python manage.py query_all
@manager.command
def query_all():
users = User.query_all()
for u in users:
print u
if __name__ == ‘__main__’:
manager.run()
操作数据库基本方法的文件 models.py:
import MySQLdb
def get_conn():
host = “127.0.0.1”
port = 3306
db = “feiniu”
user = “root”
password = “123456”
conn = MySQLdb.connect(host=host,
user=user,
passwd=password,
db=db,
port=port,
charset=”utf-8”)
return conn
class User(object):
def __init__(self, user_id, user_name):
self.user_id = user_id
self.user_name = user_name
def save(self):
conn = get_conn()
cursor = conn.cursor()
sql = “insert into user (user_id, user_name) VALUES (%s, %s)”
cursor.execute(sql, (self.user_id, self.user_name))
conn.commit()
cursor.close()
conn.close()
@staticmethod
def query_all():
conn = get_conn()
cursor = conn.cursor()
sql = “select * from user”
cursor.execute(sql)
rows = cursor.fetchall()
users = []
for r in rows:
user = User(r[0], r[1])
users.append(user)
conn.commit()
cursor.close()
conn.close()
return users
def __str__(self):
return “id: {} -name: {}”.format(self.user_id, self.user_name)
Python 中的ORM(Object Relational Mapping):
SQLAlchemy
Pony
Peewee
SQLObject
Django’s ORM
app.py:
from flask import Flask
from flask ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config[‘SQLALCHEMY_DATABASE_URI’]=”mysql://root:123456@localhost:3306/feiniu”
db = SQLAlchemy(app) #实例化
@app.route(‘/’)
def hello_world():
return ‘Hello World !’
if __name__ == ‘__main__’:
app.run()
上面的数据库修改操作文件models.py可修改为:
import MySQLdb
from app import db
class User(db.Model):
user_id = db.Column(db.Integer, primary_key = True)
user_name = db.Column(db.String)
def __init__(self, user_id, user_name):
self.user_id = user_id
self.user_name = user_name
脚本文件manage.py:
# encoding = utf-8
from flask_script import Manager
from app import app.db
from models import User
manager = Manager(app)
@manager.command
def save():
user = User(2, ‘jikexueyuan02’)
db.session.add(user)
db.session.commit()
@manager.command
Def query_all():
users = User.query.all()
for u in users:
print u
if __name__ ==’__main__’:
manager.run()
执行命令符:python manage.py query_all
执行命令符:python
在Flask应用中使用MongoDB (官网:docs.mongodb.org/manual/)
MongoDB驱动
Pymongo
Motor
安装命令 : pip install pymongo==2.8 (注:2.8为版本)
实例:
models.py:
import pymongo
def get_coll():
client = pymongo.MongoClient(‘127.0.0.1’, 27017)
db = client.feiniu
user = db.user_colletion
return user
class User(object):
def __init__(self, name, email):
self.name = name
self.email = email
def save(self):
user = { “name”: self.name, “email”: self.email }
coll = get_coll()
id = coll.insert(user)
print id
@staticmethod
def query_users():
users = get_coll().find()
return users
脚本manage.py:
# encoding = utf-8
from flask_script import Manager
from app import app
from models import User
manager = Manager(app)
@manager.command
def save():
user = User(‘xiaofei’, ‘xiaofei@feiniuchongtian.com’)
user.save()
@manager.command
def query_users():
users = User.query_users()
for user in users:
print user
if __name__ == ‘__main__’:
manager.run()
执行代码:python manage.py save
执行代码:python manage.py query_users
MongoDB 中的ORM
MongoKit
MongoAlchemy
Minimongo
MongoEngine
源文件app.py更改为:
from flask import Flask
from flask.ext.mongoengine import MongoEngine
app = Flask(__name__)
app.config[ ‘MONGODB_SETTINGS’ ] = { ‘db’: ‘feiniu’ }
db = MongoEngine(app)
@app.route(‘/’)
def hello_world():
return ‘Hello World ! ’
if __name__ == ‘__main__’:
app.run()
修改models.py源码:
from app import db
class User(db.Document):
name = db.StringField()
email = db.StringField()
def __init__(self):
return “name: {} – email: {}”.format(self.name, self.email)
修改脚本manage.py:
# encoding = utf-8
from flask_script import Manager
from app import app
from models import User
manager = Manager(app)
@manager.command
def save():
user = User(name = ‘feiniu02’, email= ‘feiniu02@feiniuchongtian.com’)
user.save()
@manager.command
def query_users():
users = User.objects.all()
for user in users:
print user
if __name__ == ‘__main__’:
manager.run()
执行保存命令: python manage.py save
执行查询命令: python manage.py query_users
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步