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

 更新时间:2020年03月28日 09:14:50   作者:喝完这杯还有一箱  
这篇文章主要介绍了django 链接多个数据库 并使用原生sql实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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中装饰器高级用法详解

    这篇文章主要介绍了Python中的装饰器的高级用法,以实例形式详细的分析了Python中的装饰器的使用技巧及相关注意事项
    2017-12-12
  • selenium设置浏览器为headless无头模式(Chrome和Firefox)

    selenium设置浏览器为headless无头模式(Chrome和Firefox)

    这篇文章主要介绍了selenium设置浏览器为headless无头模式(Chrome和Firefox),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • selenium drag_and_drop不生效的解决办法

    selenium drag_and_drop不生效的解决办法

    本文主要介绍了selenium drag_and_drop不生效的解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • Python 递归函数详解及实例

    Python 递归函数详解及实例

    这篇文章主要介绍了Python 递归函数详解及实例的相关资料,需要的朋友可以参考下
    2016-12-12
  • Python实现二叉堆

    Python实现二叉堆

    二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。
    2016-02-02
  • 在django项目中导出数据到excel文件并实现下载的功能

    在django项目中导出数据到excel文件并实现下载的功能

    这篇文章主要介绍了在django项目中导出数据到excel文件并实现下载的功能,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python实现360皮肤按钮控件示例

    python实现360皮肤按钮控件示例

    这篇文章主要介绍了python实现360皮肤按钮控件示例,需要的朋友可以参考下
    2014-02-02
  • Python绘制堆叠柱状图的实例

    Python绘制堆叠柱状图的实例

    今天小编就为大家分享一篇Python绘制堆叠柱状图的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python发送邮件实现基础解析

    Python发送邮件实现基础解析

    这篇文章主要介绍了Python发送邮件实现基础解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Django imgareaselect手动剪切头像实现方法

    Django imgareaselect手动剪切头像实现方法

    这篇文章主要介绍了Django imgareaselect手动剪切头像实现方法,实例分析了Django框架操作图片的相关技巧,需要的朋友可以参考下
    2015-05-05

最新评论