SQLAlchemy 应用创建
1.首先创建app文件夹
同django 创建app 一样 创建文件
在创建的views中写入两个蓝图函数为了操作数据库的增删改查
acc.py
from flask import Blueprint acc = Blueprint("acc",__name__) @acc.route("/acc")
def acc_func():
return "这是acc蓝图页面"
在__init__.py下写入create_app()函数
from flask import Flask
from app.views.acc import acc
from app.views.user import user
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
session=db.session
def create_app(): my_app =Flask(__name__) my_app.register_blueprint(acc)
my_app.register_blueprint(user) return my_app if __name__ == '__main__':
app=create_app()
app.run()
若运行成功,就完成重要的第一步了
第二步创建数据库表名
在models.py 内创建数据
from app import db class User(db.Model): __tablename__ ="user"
__table_args__ = {"useexisting":True} id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(32)) if __name__ == '__main__':
from app import create_app
my_app = create_app() db.drop_all(app=my_app)
db.create_all(app=my_app)
观察发现没有engine可以连接数据库
解决 :在__init__下写为
from flask import Flask
from app.views.acc import acc
from app.views.user import user
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
session=db.session
def create_app(): my_app =Flask(__name__) my_app.config["SQLALCHEMY_DATABASE_URI"]="mysql+pymysql://root:@127.0.0.1:3306/day128?charset=utf8"
# SQLALCHEMY_POOL_SIZE 配置 SQLAlchemy 的连接池大小
my_app.config["SQLALCHEMY_POOL_SIZE"] = 5
# SQLALCHEMY_POOL_TIMEOUT 配置 SQLAlchemy 的连接超时时间
my_app.config["SQLALCHEMY_POOL_TIMEOUT"] = 15
my_app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False db.init_app(my_app)
my_app.register_blueprint(acc)
my_app.register_blueprint(user)
return my_app
db=db = SQLAlchemy() db.model 相当于 Base()
这个时候就会发现数据库增加一张user表
第三部 进行数据的增添
在创建的user.py蓝图中,进行操作
from flask import Blueprint,jsonify user = Blueprint("user",__name__) @user.route("/user") def user_func(): from app.models import User
from app import db
user_obj = User(name="zq")
db.session.add(user_obj)
db.session.commit()
return "这是user蓝图" @user.route("/user_list")
def user_list():
from app.models import User res = User.query.first()
ret ={"username":res.name} return jsonify(ret)
为了仿照django,在manager.py进行启动
这里用到了装饰器
from flask_script import Manager
@manager.command
import MyApp
# 导入 Flask-Script 中的 Manager
from flask_script import Manager app = MyApp.create_app()
# 让app支持 Manager
manager = Manager(app) if __name__ == '__main__':
#app.run()
# 替换原有的app.run(),然后大功告成了
manager.run() MyApp/manager.py
Manager的两种用法
@manager.command
def runflask():
my_app.run()
return "成功"
#第一种就是通过终端启动程序,输入python manager.py runflask
#即可运行经过@manager.command 装饰的函数,就这相当于在终端启动了程序
同django的python manager.py runserver @manager.option("-n","--name",dest="name")
def run_flask(name="127.0.0.7",say=""):
a=input("真的启动me?")
if a=='y':
my_app.run(name,int(say))
else:
return f"{name}真{say}" #第二种装饰器@manager.opation("-短指令","--长指令",dest="变量名")
# 输入python manager.py run_flask 即可以进行传参的装饰器
如下详解
@manager.option("-n","--name",dest="name")
import MyApp
# 导入 Flask-Script 中的 Manager
from flask_script import Manager app = MyApp.create_app()
# 让app支持 Manager
manager = Manager(app) # type:Manager @manager.command
def DragonFire(arg):
print(arg) @manager.option("-n","--name",dest="name")
@manager.option("-s","--say",dest="say")
def talk(name,say):
print(f"{name}你可真{say}") if __name__ == '__main__':
#app.run()
# 替换原有的app.run(),然后大功告成了
manager.run() MyApp/manager.py
通过上述例子了解到可以进行 my_app.run(name,int(say))
前后输入 "127.0.0.1" 5000 即可
第四步 Migrate进行数据库迁移
在manager.py引用
from flask_migrate import Migrate,MigrateCommand 举例
import MyApp
# 导入 Flask-Script 中的 Manager
from flask_script import Manager # 导入 Flask-Migrate 中的 Migrate 和 MigrateCommand
# 这两个东西说白了就是想在 Flask-Script 中添加几个命令和指令而已
from flask_migrate import Migrate,MigrateCommand app = MyApp.create_app()
# 让app支持 Manager
manager = Manager(app) # type:Manager # Migrate 既然是数据库迁移,那么就得告诉他数据库在哪里
# 并且告诉他要支持那个app
Migrate(app,MyApp.db)
# 现在就要告诉manager 有新的指令了,这个新指令在MigrateCommand 中存着呢
manager.add_command("db",MigrateCommand) # 当你的命令中出现 db 指令,则去MigrateCommand中寻找对应关系
"""
数据库迁移指令:
python manager.py db init
python manager.py db migrate # Django中的 makemigration
python manager.py db upgrade # Django中的 migrate
""" @manager.command
def DragonFire(arg):
print(arg) @manager.option("-n","--name",dest="name")
@manager.option("-s","--say",dest="say")
def talk(name,say):
print(f"{name}你可真{say}") if __name__ == '__main__':
#app.run()
# 替换原有的app.run(),然后大功告成了
manager.run() MyApp/manager.py
我的manage.py
import app
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand my_app = app.create_app()
manager=Manager(my_app) from app import db
Migrate(my_app,db) manager.add_command("database",MigrateCommand) @manager.command
def runflask():
my_app.run()
return "成功" @manager.option("-n","--name",dest="name")
def run_flask(name="127.0.0.7",say=""):
a=input("真的启动me?")
if a=='y':
my_app.run(name,int(say))
else:
return f"{name}真{say}" if __name__ == '__main__':
manager.run()
在终端输入
python manager.py database init
python manager.py database migrate
python manager.py database migrated
就创建完成了
SQLAlchemy 应用创建的更多相关文章
- SQLALchemy之创建表,删除表
1.创建引擎 "数据库+第三方模块://用户名:密码@数据库服务端IP:端口号/数据库名?编码" engine = create_engine( "mysql+pymys ...
- sqlalchemy 多线程 创建session
1.基于threding.local,推荐使用 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine ...
- SQLAlchemy连接数据库创建表
# 连接数据库,创建表 def create_all(): engine = create_engine( 'mysql+pymysql://root:123456@127.0.0.1:3306/sq ...
- Python-Web框架之 - 利用SQLALchemy创建与数据库MySQL的连接, 详解用Flask时会遇到的一些大坑 !
经过这个小项目算是对Django与Flask这两个web框架有了新的认识 , Django本身的轮子非常齐全 , 套路也很固定 , 新手在接触Django框架时 , 不会陷入到处找轮子的大坑 ; 那么 ...
- 测开之路一百四十三:ORM框架之SQLAlchemy模型及表创建
基于前一篇内容,可以使用模型的结构 目录结构 main,入口层 from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy app = ...
- SQLAlchemy使用介绍
SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers ...
- ORM之SQLALchemy
今天来聊一聊 Python 的 ORM 框架 SQLAlchemy SQLAlchemy 没有 Django 的 Models 好用!因为models是Django自带的ORM框架,也正是因为是Dja ...
- flask 中orm关系映射 sqlalchemy的查询
flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询 一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课 ...
- flask 使用Flask-Migrate迁移数据库(创建迁移环境、生成迁移脚本、更新数据库)
使用Flask-Migrate迁移数据库 在开发时,以删除表再重建的方式更新数据库简单直接,但明显的缺陷是会丢掉数据库中的所有数据.在生产环境下,没有人想把数据都删除掉,这时需要使用数据库迁移工具来完 ...
随机推荐
- Node.js—概述
一.Node.js与其他语言对比 Node.js不是一种独立的语言,与PHP.JSP.Python.Perl.Ruby的"既是语言,也是平台"不同,Node.js的使用Java ...
- Html学习之一(锚点链接的使用,页面间的跳转)
页面一: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- 压力测试中tps上不去的原因
PS (transaction per second)代表每秒执行的事务数量,可基于测试周期内完成的事务数量计算得出.例如,用户每分钟执行6个事务,TPS为6 / 60s = 0.10 TPS. 同时 ...
- 数据库连接池 DBUtils:
import pymysqlfrom DBUtils.PooledDB import PooledDB, SharedDBConnectionPOOL = PooledDB ( creator=pym ...
- tf.summary.scalar()和tf.summary.histogram
用法: 1.tf.summary.scalar 用来显示标量信息,其格式为: tf.summary.scalar(tags, values, collections=None, name=None) ...
- 合并K个有序数组-Java
package com.rao.algorithm; import java.util.Arrays; /** * @author Srao * @className MergeK * @date 2 ...
- 【Linux命令】ulimit设置最大文件打开数
一.简介 在Linux下有时会遇到Socket/File : Can't open so many files的问题.其实Linux是有文件句柄限制的,而且Linux默认一般都是1024(阿里云主机默 ...
- redis命令之 ----List(列表)
BLPOP BRPOP BRPOPLPUSH LINDEX LINDEX key index 返回列表 key 中,下标为 index 的元素. 下标(index)参数 start 和 stop 都以 ...
- Java & PHP RSA 互通密钥、签名、验签、加密、解密
RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Le ...
- Visual Studio 定制模板类---详细步骤
1.先定义一个类文件,将要定义的信息写入类文件 比如我每次写一个命令都是这个套路,要继承接口,要写上相应的特性,每次都 是重复的工作: 2.提取类模板 项目=>导出模板 这里你可以导出项目模板和 ...