python连接多个数据库_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实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: django 链接多个数据库 并使用原生sql实现

本文地址: http://www.cppcns.com/jiaoben/python/304271.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值