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解决鸡兔同笼问题的方法
Dec 20 Python
详解Python中dict与set的使用
Aug 10 Python
Python中的Descriptor描述符学习教程
Jun 02 Python
python方向键控制上下左右代码
Jan 20 Python
Python3 导入上级目录中的模块实例
Feb 16 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
Python hashlib常见摘要算法详解
Jan 13 Python
python中图像通道分离与合并实例
Jan 17 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
Aug 07 Python
python 中关于pycharm选择运行环境的问题
Oct 31 Python
python实现学生信息管理系统(面向对象)
Jun 05 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提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
jQuery替换textarea中换行的方法
2015/06/10 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
解决Djang2.0.1中的reverse导入失败的问题
2019/08/16 Python
Python 50行爬虫抓取并处理图灵书目过程详解
2019/09/20 Python
基于python实现百度语音识别和图灵对话
2020/11/02 Python
Pandas之缺失数据的实现
2021/01/06 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
英国羊皮鞋类领先品牌:Just Sheepskin
2019/12/12 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
计算机相关的自我评价
2014/01/15 职场文书
自荐信格式简述
2014/01/25 职场文书
城市创卫标语
2014/06/17 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
茶花女读书笔记
2015/06/29 职场文书
解除租赁合同协议书
2016/03/21 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android
Python初识逻辑与if语句及用法大全
2021/08/07 Python
Go中的条件语句Switch示例详解
2021/08/23 Golang
USB TYPE-C 或将成为所有智能手机充电标准
2022/04/21 数码科技