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的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
python 剪切移动文件的实现代码
Aug 02 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
Pandas之groupby( )用法笔记小结
Jul 23 Python
python 两个数据库postgresql对比
Oct 21 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
python实现人机猜拳小游戏
Feb 03 Python
Python版中国省市经纬度
Feb 11 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 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连接Access数据库的方法小结
2013/06/20 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
JS location几个方法小姐
2008/07/09 Javascript
js url传值中文乱码之解决之道
2009/11/20 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
javascript表单验证和Window详解
2014/12/11 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
[02:08]什么藏在DOTA2 TI9“小紫本”里?斧王历险记告诉你!
2019/05/17 DOTA
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
Python内置异常类型全面汇总
2020/05/28 Python
Python常用断言函数实例汇总
2020/11/30 Python
美国电视购物HSN官网:HSN
2016/09/07 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
兼职学生的自我评价
2013/11/24 职场文书
毕业生个人的求职信范文
2013/12/03 职场文书
教师实习自我鉴定
2013/12/14 职场文书
初一家长会邀请函
2014/01/31 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
入党自荐书范文
2015/03/05 职场文书
消防演习通知
2015/04/25 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis