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开发简易版在线音乐播放器
Mar 03 Python
Python进阶-函数默认参数(详解)
May 18 Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
python使用rsa非对称加密过程解析
Dec 28 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 Python
tensorflow使用指定gpu的方法
Feb 04 Python
详解Python IO编程
Jul 24 Python
Python析构函数__del__定义原理解析
Nov 20 Python
Python 内存管理机制全面分析
Jan 16 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
深入php之规范编程命名小结
2013/05/15 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
jQuery动画与特效详解
2015/02/01 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
原生js实现放大镜
2017/02/20 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
JS中type="button"和type="submit"的区别
2017/07/04 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
EasyUI实现下拉框多选功能
2017/11/07 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
Python中的迭代器漫谈
2015/02/03 Python
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
Python脚本实现自动发带图的微博
2016/04/27 Python
浅析python的优势和不足之处
2018/11/20 Python
Python使用字典实现的简单记事本功能示例
2019/08/15 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
2020/08/05 Python
Bobbi Brown芭比波朗美国官网:化妆师专业彩妆保养品品牌
2016/08/18 全球购物
八年级数学教学反思
2014/01/31 职场文书
小班评语大全
2014/05/04 职场文书
经典搞笑版检讨书
2015/02/19 职场文书
师德承诺书2015
2015/04/28 职场文书
学校运动会简讯
2015/07/20 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
python必学知识之文件操作(建议收藏)
2021/05/30 Python