如何将cx_Oracle中的变量与Python3.x绑定?

时间:2017-08-15 09:59:05

标签: python sql oracle selenium cx-oracle

我希望你可以帮助我,因为我已经坚持了一段时间。第一次发布在这里,什么不是。我先说这是一名自动化测试员,他有一点Python经验,但我不是专家。

我一直绞尽脑汁试图解决这个问题而且我不知道它是否是cx_Oracle的限制或者我找不到有类似问题的人。我对cx_Oracle几乎没有任何经验。

所以,这是我想要做的一个小例子。我无法发布整个事情,因为我已经改变了它并移动了一些东西,这有点乱。我只是想尝试做一个非常基本的版本的东西;

    def test(self):
        #Driver is set up
        var1 = driver.find_element_by_name('blah').text
        var1 = str(var1)
        #Do some other stuff on the page
        return var1

    def foo():
        #Setup cx_Oracle and connect to DB
        sql = ('SELECT value FROM table WHERE ref = :1')
        c.execute(sql, (var1,)
        #Verify the results of the query

    class testcase(unittest.Testcase):
        def test_case(self):
            setUp(self)
            test(self)
            foo()

没有错误消息或类似的东西。它似乎没有看到变量的值。当我对var1的值进行硬编码时,它会起作用并返回结果,就好像我通过DBeaver查询了DB一样。

我已经尝试将所有内容放在同一个函数中并获得相同的结果。

我尝试传递var1,如下所示,仍然得到相同的结果:

    def test(self):
        #Driver is set up
        var1 = driver.find_element_by_name('blah').text
        #Do some other stuff on the page
        return var1

    def foo(var1):
        #Setup cx_Oracle and connect to DB
        sql = ('SELECT value FROM table WHERE ref = :1')
        c.execute(sql, (var1,))
        #Verify the results of the query

    class testcase(unittest.Testcase):
        def test_case(self):
            setUp(self)
            var1 = test(self)
            print (var1)
            foo(var1)

我一直在使用this as a reference for binding variables,但这些方法都不适合我。

所以,总而言之,我有两个函数,我想将一个变量从一个传递到另一个但是cx_Oracle似乎不喜欢它。我之所以选择cx_Oracle,是因为pyodbc和pypyodbc似乎并不想连接到我试图与之交谈的Oracle 10g数据库。如果有人知道更好的工具,我甚至愿意使用其他工具?

如果您需要更多详情,请与我们联系。

2 个答案:

答案 0 :(得分:2)

当遇到这样的问题时,在使用它们之前插入一些打印语句有很大帮助,因此您知道实际上正在使用正确的变量。对代码进行一些更改:

def test(self):
    #Driver is set up
    var1 = str(driver.find_element_by_name('blah').text)
    #var1 is a local variable to function test

    #Do some other stuff on the page
    return var1

def foo(var1):
    #Setup cx_Oracle and connect to DB
    sql = ('SELECT value FROM table WHERE ref = :1')
    c.execute(sql, (var1,))
    #Verify the results of the query

class testcase(unittest.Testcase):
    def test_case(self):
        setUp(self)
        var1 = test(self)
        print (var1)
        foo(var1)

答案 1 :(得分:-1)

您可以使用{{1}}构建sql

{{1}}