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

 

posted @   飞牛冲天  阅读(239)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示