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代码真的很爽
Aug 26 Python
python用字典统计单词或汉字词个数示例
Apr 22 Python
Python的Bottle框架中获取制定cookie的教程
Apr 24 Python
Python 用Redis简单实现分布式爬虫的方法
Nov 23 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
在Django中输出matplotlib生成的图片方法
May 24 Python
Python3实现转换Image图片格式
Jun 21 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
python 发送json数据操作实例分析
Oct 15 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
Python 没有main函数的原因
Jul 10 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
Smarty简单生成表单元素的方法示例
2016/05/23 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
javascript特殊用法示例介绍
2013/11/29 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
jQuery插件实现图片轮播特效
2016/06/16 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
讲解vue-router之什么是编程式路由
2018/05/28 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
vue常用指令代码实例总结
2020/03/16 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
简单的命令查看安装的python版本号
2020/08/28 Python
突破canvas语法限制 让他支持链式语法
2012/12/24 HTML / CSS
德国高性价比网上药店:medpex
2017/07/09 全球购物
刑事附带民事上诉状
2015/05/23 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript