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实现把utf-8格式的文件转换成gbk格式的文件
Jan 22 Python
python中常用的九种预处理方法分享
Sep 11 Python
图文详解Django使用Pycharm连接MySQL数据库
Aug 09 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
使用Python实现分别输出每个数组
Dec 06 Python
Python中if有多个条件处理方法
Feb 26 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
Dec 18 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 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
文章推荐系统(二)
2006/10/09 PHP
php字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
js实现的点击数量加一可操作数据库
2014/05/09 Javascript
JS判断移动端访问设备并加载对应CSS样式
2014/06/13 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
你了解vue3.0响应式数据怎么实现吗
2019/06/07 Javascript
vue ssr服务端渲染(小白解惑)
2019/11/10 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
python实现根据月份和日期得到星座的方法
2015/03/27 Python
Python装饰器简单用法实例小结
2018/12/03 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
Python实现EM算法实例代码
2020/10/04 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
金牌葡萄酒俱乐部:Gold Medal Wine Club
2017/11/02 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
社会保险接收函
2014/01/12 职场文书
留学经费担保书
2014/05/12 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
企业员工辞职信范文
2015/05/12 职场文书
Apache POI的基本使用详解
2021/11/07 Servers
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫