Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较cx_oracle游标与django queryset的值_Django_Django Queryset_Cx Oracle - Fatal编程技术网

比较cx_oracle游标与django queryset的值

比较cx_oracle游标与django queryset的值,django,django-queryset,cx-oracle,Django,Django Queryset,Cx Oracle,在我的项目中,我使用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")

在我的项目中,我使用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数据库中的现有内容与游标中的内容合并。如果存在具有不同值的现有参数,则需要更新其值。如果是新参数,则需要创建它。最好的方法是什么?我应该使用原始sql进行合并吗

谢谢

我回答我自己的问题。 这是在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
                       )
我回答我自己的问题。 这是在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
                       )