首页 > 数据库 >原生sql(django-orm如何执行原生sql)、flask-sqlalchemy使用、flask-migrate使用、

原生sql(django-orm如何执行原生sql)、flask-sqlalchemy使用、flask-migrate使用、

时间:2023-11-22 21:49:02浏览次数:49  
标签:原生 flask app db cursor session sql import

原生sql(django-orm如何执行原生sql)

django执行原生sql

import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject2.settings')
import django

django.setup()

from app01.models import Book, User

# 原生sql,方式一,跟对象做映射:
# book_list=Book.objects.raw('select id,name,price,publish from app01_book where id =2')
# print(book_list) # RawQuerySet
# for book in book_list:
#     print(book.name)

# 了解的,咱们不这么写
# obj_list = User.objects.raw('select id,name,price,publish from app01_book where id =2')
# print(obj_list)  # RawQuerySet
# for obj in obj_list:
#     print(obj.name)
#     print(obj.price)


## 方式二,纯原生
from django.db import connection
cursor=connection.cursor()
print(type(cursor))
cursor.execute('select distinct id, name from app01_book')

from django.db.backends.utils import CursorDebugWrapper # 这个类上没有fetchall, 要么反射进去的,要么执行 . 拦截 __getattr__
print(cursor.fetchall())
cursor.close()

 

SQLAlchemy执行原生sql

### 第一种:
# 1  导入
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.engine.base import Engine
import pymysql

# 2 创建engine对象
engine = create_engine(
    "mysql+pymysql://root:[email protected]:3306/cnblogs",
    max_overflow=0,  # 超过连接池大小外最多创建的连接
    pool_size=5,  # 连接池大小
    pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错
    pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)
########  方式一,纯原生
# 3 通过engine获得conn,cursor
# conn = engine.raw_connection()  # 拿到连接对象
# cursor = conn.cursor()
# # 4 具体操作
# cursor.execute('select * from article limit 10')
# print(cursor.fetchall())
# cursor.close()
# conn.close()


### 方式二:通过session
from sqlalchemy.orm import sessionmaker,scoped_session
from sqlalchemy.sql import text
Session = sessionmaker(bind=engine)
session = scoped_session(Session) # 线程安全的session
# cursor=session.execute(text('select * from article'))  # 需要用text包一下
cursor=session.execute(text('select * from article where id = :value'),params={"value":218})  # 需要用text包一下 ,用 :变量名占位
print(cursor.fetchall())
cursor.close()
session.close()


## 方式三:执行原生sql方式三:
# res = session.query(User).from_statement(text("SELECT * FROM boy where name=:name")).params(name='lqz').all()

flask-sqlalchemy使用

# sqlalchemy学完了,集成到flask中

## 纯自己集成:详情见项目
    1 在models中建立表---》表手动迁移到数据库
    2 单例的 线程安全session,链接mysql,可以使用配置文件
    3 以后在视图函数中,直接使用session操作即可

## 借助于flask-sqlalchemy
    1 导入 from flask_sqlalchemy import SQLAlchemy
    2 实例化得到对象
        db = SQLAlchemy()
    3  将db注册到app中
        db.init_app(app)
    4 视图函数中使用session
        全局的db.session  # 线程安全的
    5 models.py 中继承Model
        db.Model
    6 写字段 
        username = db.Column(db.String(80), unique=True, nullable=False)
    7 配置文件中加入
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://[email protected]:3306/ddd?charset=utf8"
    SQLALCHEMY_POOL_SIZE = 5
    SQLALCHEMY_POOL_TIMEOUT = 30
    SQLALCHEMY_POOL_RECYCLE = -1
    # 追踪对象的修改并且发送信号
    SQLALCHEMY_TRACK_MODIFICATIONS = False

 flask-migrate使用

# flask-sqlalchemy  不能对字段进行增改,也不能自动把表同步到数据库,表变更记录
    python manage.py maigrate

# pip3 install flask-migrate
    -老版本需要结合:flask-script
    -新版本不需要了:flask有自己定制命令
    
# https://github.com/miguelgrinberg/Flask-Migrate/
pip3 install Flask-Migrate --upgrade
4.0.5

####### 使用
from flask_migrate import Migrate

app = Flask(__name__)
app.config.from_pyfile('./settings.py')
db = SQLAlchemy(app)
# db.init_app(app)
migrate = Migrate(app, db) # flask 就会多出好几个命令---》

# flask --app manage:app db init  # 初始化,第一次执行,以后再也不执行了,它执行完,会出现一个migrations文件夹
# flask --app manage:app db migrate # django中的makemigrations 是一模一样
# flask --app manage:app db upgrade  # 跟django的migrate一样



# flask上其他第三方插件
    cors
    token
    cache
    restful
    
    
# 项目
    1 pycharm打开
    2 找到models 把一些注释打开,创建数据库 movie,把main打开
        -执行 python models.py  # 创建表,插入记录
    3 把原来注释加上
    4 __init__ 改真正的数据库地址
    5 在cmd中执行  python manage.py runserver
        http://127.0.0.1:5000/admin/
  

 

标签:原生,flask,app,db,cursor,session,sql,import
From: https://www.cnblogs.com/zfq132/p/17849011.html

相关文章

  • 如何收缩 SQL Server 中的 Tempdb 数据库
      Tempdb信息 收缩Tempdb的方法1 收缩Tempdb的方法2 收缩Tempdb的方法3 在使用Tempdb时执行DBCCSHRINKDATABASE或DBCCSHRINKFILE的结果 参考<scripttype="text/javascript">varsectionFilter="type!='notice'&&type!='securedata&......
  • vxe-gird前端日期段查询,通过手工sql是有数据,但是在前端无数据。
    前端查询的时候,日期是返回这种数组:["2023-11-0120:00:00","2023-11-0220:00:00"]1、那么有二种方式,一直是直接传给服务端,由服务端去处理。@RequestParam(value="createDate[]",required=false)String[]createDates用这种形式放到controller的参数列表里就可以。2、......
  • Linux系统下进入Mysql
    1、首先查看是否安装mysqlservicemysqldstart2、启动mysql服务systemctlstartmysqld.service 没报错就启动成功。3、查看mysql运行状态servicemysqldstatus出现绿色启动成功!4、进入数据库mysql-uroot-p密码一般为123456也可以输入命令:查看初始密......
  • pgsql 和 mysql语法对比
    超全mysql转换postgresql数据库方案https://blog.csdn.net/weixin_42303757/article/details/128896250?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4-128896250-blog-131395729.235%5Ev38%5Epc_relevant_anti_t......
  • 15-基础SQL-函数
    什么是函数:是指一段可以直接被另一段程序调用的程序或代码MySQL的函数主要包括:字符串函数、数值函数、日期函数、流程函数。字符串函数MySQL中内置了很多字符串函数,常用的几个如下:CONCAT演示:SELECTCONCAT("Hello","MySQL"); LOWER......
  • Docker部署SQLServer
    一、简介美国Microsoft公司推出的一种关系型数据库系统。SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。二、搭建SQLServer绿联DX4600为例,首先我们打开Docker......
  • MySQL语句语法练习记录
    导言:MySQL是一种广泛使用的关系型数据库管理系统,掌握MySQL语句的语法对于数据库开发和管理至关重要。本篇博客将记录一些常见的MySQL语句语法练习,并提供相关的演示示例,帮助读者更好地理解和应用MySQL语句。1.创建数据库和表创建数据库和表是开始使用MySQL的第一步。下面是一个创......
  • MySQL 基础介绍
    MySQL介绍相关概念DB(DataBase)数据库。是一个存储数据的容器DBA(DatabaseAdministrator):数据库管理员。负责数据库的管理和维护的专业人员DBMS(DatabaseManagementSystem):数据库管理系统。是一种软件,用于创建和管理数据库。App(Application):应用程序。执行特定任务或一系列任务的......
  • Spring Cloud +UniApp +MySql框架开发的智慧工地云平台源码
    智慧工地是指通过信息化技术、物联网、人工智能技术等手段,对建筑工地进行数字化、智能化、网络化升级,实现对施工全过程的实时监控、数据分析、智能管理和优化调控。智慧工地的建设可以提高工地的安全性、效率性和质量,降低施工成本,是建筑行业数字化转型升级的重要抓手。主要围绕“人......
  • 添加索引 yii获取sql
    //添加索引sqlALTERTABLE`work_map`ADDINDEXidx_wmp_region_id(`wmp_region_id`)仓库工作单方案准备列表,展示角色所配置城市的工作单信息短信消息模版调整gitremoteupdateorigin--pruneyii2获取当前sql$query->createCommand()->getRawSql();......