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获取本地计算机名字的方法
Apr 29 Python
Python编写生成验证码的脚本的教程
May 04 Python
python中管道用法入门实例
Jun 04 Python
python发送HTTP请求的方法小结
Jul 08 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
Python设计模式之命令模式简单示例
Jan 10 Python
Python使用numpy实现BP神经网络
Mar 10 Python
Python实现多属性排序的方法
Dec 05 Python
Python编程学习之如何判断3个数的大小
Aug 07 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
基于Python实现剪切板实时监控方法解析
Sep 11 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 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
收音机术语解释
2021/03/01 无线电
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
PHP获取指定月份第一天和最后一天的方法
2015/07/18 PHP
PHP符合PSR编程规范的实例分享
2016/12/21 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
js取整数、取余数的方法
2014/05/11 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python中sets模块的用法实例
2014/09/30 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
Python 可变类型和不可变类型及引用过程解析
2019/09/27 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
canvas绘制太极图的实现示例
2020/04/29 HTML / CSS
银行门卫岗位职责
2013/12/29 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
趣味活动策划方案
2014/02/08 职场文书
教学改革实施方案
2014/03/31 职场文书
2015年乡镇发展党员工作总结
2015/03/31 职场文书
如何写辞职信
2015/05/13 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android