django 链接多个数据库 并使用原生sql实现


Posted in Python onMarch 28, 2020

settings文件如下:

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  },
  'db1': {  # 配置第二个数据库节点名称
    'ENGINE': 'django.db.backends.oracle',
    'NAME': 'devdb',
    'USER': 'hysh',
    'PASSWORD': 'hysh',
    'HOST': '192.168.191.3',
    'PORT': '1521',
  },
}

查找Django的文档:

from django.db import connection
 
def my_custom_sql(self):
  with connection.cursor() as cursor:
    cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
    cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
    row = cursor.fetchone()
 
  return row

上述方法是设置中如果有多个数据库,会默认使用 default,当你想使用指定的数据库连接时,引入的对象就变成了connections !

from django.db import connection
 
def my_custom_sql(self):
  with connection.cursor() as cursor:
    cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
    cursor.execute("SELECT foo FROM bar WHERE baz = %s", [self.baz])
    row = cursor.fetchone()
 
  return row

之后再进行操作。

补充知识:Django多数据源接入类

from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from rest_framework import status
from django.db import transaction


from .contants import db_dict

contants.py的内容

(

import cx_Oracle
import pymysql

# 定义一个数据库类型&引擎的字典,
db_dict = {'mysql':pymysql,'Oracle':cx_Oracle}

)
from .models import DataSystem,Rule


class DBconnectView(GenericAPIView):
  __DBtype = db_dict
  def get(self,request,pk,rule_id):

    # 通过传入的id进行对应的数据库链接
    self.datas = DataSystem.objects.get(pk=pk)
    self.url = self.datas.url
    self.username = self.datas.username
    self.password = self.datas.password_enc
    self.DBname = self.datas.name
    self.DBtype = self.__DBtype[self.datas.type]

    # 获取check_code规则
    self.ruledatas = Rule.objects.get(id=rule_id)
    self.check_code = self.ruledatas.check_code
    # db = __import__(self.DBtype)

    try:
      conn = self.DBtype.connect(host=self.url,user=self.username,password=self.password,database=self.DBname)
      # 链接成功后创建一个游标
      cs_ms = conn.cursor()
    except Exception as e:
      raise e
    else:
      # 明显的开启事务
      with transaction.atomic():
        # 在安全的地方,创建保存点,将来操作数据库失败回滚到此
        save_id = transaction.savepoint()

        try:

          # 获取一个元组
          db_ret = cs_ms.execute(self.check_code)
        except Exception as e:
          transaction.savepoint_rollback(save_id)
          raise e
        else:
          db_set = db_ret.fetchone()
          # transaction.savepoint_commit(save_id)
    finally:
      cs_ms.close()
      conn.close()

    return Response({'pk':pk,'rule_id':rule_id})

以上这篇django 链接多个数据库 并使用原生sql实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python计算文本文件行数的方法
Jul 06 Python
python分割列表(list)的方法示例
May 07 Python
深入分析python数据挖掘 Json结构分析
Apr 21 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
python tkinter实现屏保程序
Jul 30 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 Python
python如何安装下载后的模块
Jul 03 Python
OpenCV读取与写入图片的实现
Oct 13 Python
详解python的super()的作用和原理
Oct 29 Python
详解Python小数据池和代码块缓存机制
Apr 07 Python
python三子棋游戏
May 04 Python
Django多数据库配置及逆向生成model教程
Mar 28 #Python
后端开发使用pycharm的技巧(推荐)
Mar 27 #Python
如何基于python3和Vue实现AES数据加密
Mar 27 #Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 #Python
Python实现的北京积分落户数据分析示例
Mar 27 #Python
Pyspark获取并处理RDD数据代码实例
Mar 27 #Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 #Python
You might like
xml+php动态载入与分页
2006/10/09 PHP
php获取远程图片体积大小的实例
2013/11/12 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
angular多语言配置详解
2019/05/16 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
jquery分页优化操作实例分析
2019/08/23 jQuery
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
基于Vue中使用节流Lodash throttle详解
2019/10/30 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
微信小程序实现日历小功能
2020/11/18 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
python实现图片彩色转化为素描
2019/01/15 Python
如何基于python操作excel并获取内容
2019/12/24 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
基于python实现计算且附带进度条代码实例
2020/03/31 Python
pandas使用之宽表变窄表的实现
2020/04/12 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
python解包用法详解
2021/02/17 Python
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
2014年计生工作总结
2014/11/21 职场文书