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的文档:
fromdjango.dbimportconnection defmy_custom_sql(self): withconnection.cursor()ascursor: cursor.execute("UPDATEbarSETfoo=1WHEREbaz=%s",[self.baz]) cursor.execute("SELECTfooFROMbarWHEREbaz=%s",[self.baz]) row=cursor.fetchone() returnrow
上述方法是设置中如果有多个数据库,会默认使用default,当你想使用指定的数据库连接时,引入的对象就变成了connections!
fromdjango.dbimportconnection defmy_custom_sql(self): withconnection.cursor()ascursor: cursor.execute("UPDATEbarSETfoo=1WHEREbaz=%s",[self.baz]) cursor.execute("SELECTfooFROMbarWHEREbaz=%s",[self.baz]) row=cursor.fetchone() returnrow
之后再进行操作。
补充知识:Django多数据源接入类
fromrest_framework.genericsimportGenericAPIView fromrest_framework.responseimportResponse fromrest_frameworkimportstatus fromdjango.dbimporttransaction from.contantsimportdb_dict contants.py的内容 ( importcx_Oracle importpymysql #定义一个数据库类型&引擎的字典, db_dict={'mysql':pymysql,'Oracle':cx_Oracle} ) from.modelsimportDataSystem,Rule classDBconnectView(GenericAPIView): __DBtype=db_dict defget(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() exceptExceptionase: raisee else: #明显的开启事务 withtransaction.atomic(): #在安全的地方,创建保存点,将来操作数据库失败回滚到此 save_id=transaction.savepoint() try: #获取一个元组 db_ret=cs_ms.execute(self.check_code) exceptExceptionase: transaction.savepoint_rollback(save_id) raisee else: db_set=db_ret.fetchone() #transaction.savepoint_commit(save_id) finally: cs_ms.close() conn.close() returnResponse({'pk':pk,'rule_id':rule_id})
以上这篇django链接多个数据库并使用原生sql实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。