原生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