将 cx_oracle 游标的值与 Django 查询集进行比较
Compare values from cx_oracle cursor with django queryset
在我的项目中,我使用 cx_Oracle 从 oracle 数据库收集数据,然后我需要将 cx_Oracle 游标的结果与我有模型的 SQLite 数据库的数据进行比较。
我有以下代码可用于添加缺少的参数:
def GetParams(self):
repo_params = Parameters.objects.filter(dbid=self.dbid).only('name','value')
sql = ("select name, value from v$parameter")
self.cur.execute(sql)
res = self.cur.fetchall()
repo_params = list(repo_params)
parameters = []
for i in res:
if i[1] not in repo_params:
new_param = Parameters(name=i[1],value=i[2])
parameters.append(new_param)
if len(parameters) > 0:
Parameters.objects.bulk_create(parameters)
但我真正想做的是将我的 SQLite 数据库中的现有内容与游标中的内容合并。如果现有参数存在不同的值,那么我需要更新它的值。如果它是一个新参数,则需要创建它。做这个的最好方式是什么?我应该使用 RAW sql 进行 MERGE 吗?
谢谢
我回答我自己的问题。
这是在 SQLite 中处理插入新参数和更新现有参数的简化方法:
from django.db import connection
def GetParams(self):
sql = ("select name, value from v$parameter")
self.cur.execute(sql)
res = self.cur.fetchall()
cursor = connection.cursor()
for i in res:
cursor.execute('''INSERT OR REPLACE
INTO Parameters(dbid, name, value)
VALUES( %s, %s, %s)''',[self.dbid,i[0],i[1]]
)
connection.commit()
更新:
更好:
def GetParams(self):
sql = ("select :dbid, name, value from v$parameter")
named_params = {'dbid': self.dbid}
self.cur.execute(sql, named_params)
res = self.cur.fetchall()
cursor = connection.cursor()
cursor.executemany('INSERT OR REPLACE\n'
'INTO Parameters(dbid, name, value)\n'
'VALUES( ?, ?, ?)', res
)
在我的项目中,我使用 cx_Oracle 从 oracle 数据库收集数据,然后我需要将 cx_Oracle 游标的结果与我有模型的 SQLite 数据库的数据进行比较。
我有以下代码可用于添加缺少的参数:
def GetParams(self):
repo_params = Parameters.objects.filter(dbid=self.dbid).only('name','value')
sql = ("select name, value from v$parameter")
self.cur.execute(sql)
res = self.cur.fetchall()
repo_params = list(repo_params)
parameters = []
for i in res:
if i[1] not in repo_params:
new_param = Parameters(name=i[1],value=i[2])
parameters.append(new_param)
if len(parameters) > 0:
Parameters.objects.bulk_create(parameters)
但我真正想做的是将我的 SQLite 数据库中的现有内容与游标中的内容合并。如果现有参数存在不同的值,那么我需要更新它的值。如果它是一个新参数,则需要创建它。做这个的最好方式是什么?我应该使用 RAW sql 进行 MERGE 吗?
谢谢
我回答我自己的问题。 这是在 SQLite 中处理插入新参数和更新现有参数的简化方法:
from django.db import connection
def GetParams(self):
sql = ("select name, value from v$parameter")
self.cur.execute(sql)
res = self.cur.fetchall()
cursor = connection.cursor()
for i in res:
cursor.execute('''INSERT OR REPLACE
INTO Parameters(dbid, name, value)
VALUES( %s, %s, %s)''',[self.dbid,i[0],i[1]]
)
connection.commit()
更新:
更好:
def GetParams(self):
sql = ("select :dbid, name, value from v$parameter")
named_params = {'dbid': self.dbid}
self.cur.execute(sql, named_params)
res = self.cur.fetchall()
cursor = connection.cursor()
cursor.executemany('INSERT OR REPLACE\n'
'INTO Parameters(dbid, name, value)\n'
'VALUES( ?, ?, ?)', res
)