最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django 鏈接多個(gè)數(shù)據(jù)庫(kù) 并使用原生sql實(shí)現(xiàn)

 更新時(shí)間:2020年03月28日 09:14:50   作者:喝完這杯還有一箱  
這篇文章主要介紹了django 鏈接多個(gè)數(shù)據(jù)庫(kù) 并使用原生sql實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

settings文件如下:

DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
  },
  'db1': {  # 配置第二個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)名稱
    '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

上述方法是設(shè)置中如果有多個(gè)數(shù)據(jù)庫(kù),會(huì)默認(rèn)使用 default,當(dāng)你想使用指定的數(shù)據(jù)庫(kù)連接時(shí),引入的對(duì)象就變成了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

之后再進(jìn)行操作。

補(bǔ)充知識(shí):Django多數(shù)據(jù)源接入類

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的內(nèi)容

(

import cx_Oracle
import pymysql

# 定義一個(gè)數(shù)據(jù)庫(kù)類型&引擎的字典,
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):

    # 通過(guò)傳入的id進(jìn)行對(duì)應(yīng)的數(shù)據(jù)庫(kù)鏈接
    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規(guī)則
    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)
      # 鏈接成功后創(chuàng)建一個(gè)游標(biāo)
      cs_ms = conn.cursor()
    except Exception as e:
      raise e
    else:
      # 明顯的開(kāi)啟事務(wù)
      with transaction.atomic():
        # 在安全的地方,創(chuàng)建保存點(diǎn),將來(lái)操作數(shù)據(jù)庫(kù)失敗回滾到此
        save_id = transaction.savepoint()

        try:

          # 獲取一個(gè)元組
          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 鏈接多個(gè)數(shù)據(jù)庫(kù) 并使用原生sql實(shí)現(xiàn)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中裝飾器高級(jí)用法詳解

    Python中裝飾器高級(jí)用法詳解

    這篇文章主要介紹了Python中的裝飾器的高級(jí)用法,以實(shí)例形式詳細(xì)的分析了Python中的裝飾器的使用技巧及相關(guān)注意事項(xiàng)
    2017-12-12
  • selenium設(shè)置瀏覽器為headless無(wú)頭模式(Chrome和Firefox)

    selenium設(shè)置瀏覽器為headless無(wú)頭模式(Chrome和Firefox)

    這篇文章主要介紹了selenium設(shè)置瀏覽器為headless無(wú)頭模式(Chrome和Firefox),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • selenium?drag_and_drop不生效的解決辦法

    selenium?drag_and_drop不生效的解決辦法

    本文主要介紹了selenium?drag_and_drop不生效的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python 遞歸函數(shù)詳解及實(shí)例

    Python 遞歸函數(shù)詳解及實(shí)例

    這篇文章主要介紹了Python 遞歸函數(shù)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Python實(shí)現(xiàn)二叉堆

    Python實(shí)現(xiàn)二叉堆

    二叉堆是一種特殊的堆,二叉堆是完全二元樹(shù)(二叉樹(shù))或者是近似完全二元樹(shù)(二叉樹(shù))。二叉堆有兩種:最大堆和最小堆。最大堆:父結(jié)點(diǎn)的鍵值總是大于或等于任何一個(gè)子節(jié)點(diǎn)的鍵值;最小堆:父結(jié)點(diǎn)的鍵值總是小于或等于任何一個(gè)子節(jié)點(diǎn)的鍵值。
    2016-02-02
  • 在django項(xiàng)目中導(dǎo)出數(shù)據(jù)到excel文件并實(shí)現(xiàn)下載的功能

    在django項(xiàng)目中導(dǎo)出數(shù)據(jù)到excel文件并實(shí)現(xiàn)下載的功能

    這篇文章主要介紹了在django項(xiàng)目中導(dǎo)出數(shù)據(jù)到excel文件并實(shí)現(xiàn)下載的功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • python實(shí)現(xiàn)360皮膚按鈕控件示例

    python實(shí)現(xiàn)360皮膚按鈕控件示例

    這篇文章主要介紹了python實(shí)現(xiàn)360皮膚按鈕控件示例,需要的朋友可以參考下
    2014-02-02
  • Python繪制堆疊柱狀圖的實(shí)例

    Python繪制堆疊柱狀圖的實(shí)例

    今天小編就為大家分享一篇Python繪制堆疊柱狀圖的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python發(fā)送郵件實(shí)現(xiàn)基礎(chǔ)解析

    Python發(fā)送郵件實(shí)現(xiàn)基礎(chǔ)解析

    這篇文章主要介紹了Python發(fā)送郵件實(shí)現(xiàn)基礎(chǔ)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Django imgareaselect手動(dòng)剪切頭像實(shí)現(xiàn)方法

    Django imgareaselect手動(dòng)剪切頭像實(shí)現(xiàn)方法

    這篇文章主要介紹了Django imgareaselect手動(dòng)剪切頭像實(shí)現(xiàn)方法,實(shí)例分析了Django框架操作圖片的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

甘孜县| 长汀县| 沈丘县| 海安县| 昭苏县| 崇左市| 科技| 东阿县| 酉阳| 页游| 岫岩| 新和县| 娱乐| 墨脱县| 宁强县| 天峻县| 克什克腾旗| 平阴县| 黄陵县| 宣武区| 莱西市| 沂水县| 类乌齐县| 安庆市| 镇赉县| 长武县| 巴林右旗| 炉霍县| 天气| 三门峡市| 邹平县| 泌阳县| 望城县| 天祝| 武功县| 昔阳县| 习水县| 康定县| 亚东县| 怀远县| 北辰区|