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批量复制图片到另一个文件夹
Sep 17 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
python多线程高级锁condition简单用法示例
Nov 07 Python
django 实现手动存储文件到model的FileField
Mar 30 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
Python实现捕获异常发生的文件和具体行数
Apr 25 Python
Pandas实现一列数据分隔为两列
May 18 Python
python绘图模块之利用turtle画图
Feb 12 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+MySql编写聊天室
2006/10/09 PHP
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
php中$_SERVER[PHP_SELF] 和 $_SERVER[SCRIPT_NAME]之间的区别
2009/09/05 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
PHP手机短信验证码实现流程详解
2018/05/17 PHP
php实现微信支付之退款功能
2018/05/30 PHP
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
PHP中使用微秒计算脚本执行时间例子
2014/11/19 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
node中使用es6/7/8(支持性与性能)
2019/03/28 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
vue中监听返回键问题
2019/08/28 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
2019/09/20 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
对django中render()与render_to_response()的区别详解
2018/10/16 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
Django bulk_create()、update()与数据库事务的效率对比分析
2020/05/15 Python
python绘制分布折线图的示例
2020/09/24 Python
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
自动化职业生涯规划书范文
2014/01/03 职场文书
联谊活动策划书
2014/01/26 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
大班亲子运动会方案
2014/06/10 职场文书
国庆节标语大全
2014/10/08 职场文书
销售业务员岗位职责
2015/02/13 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python