pyodbc中的字符串参数

时间:2013-12-13 18:06:45

标签: python pyodbc

我正在重新创建以难以访问的格式存储的数据。大多数数据已成功移动和转换。此Python脚本用于根据旧数据库标识每个对象的父级,并在新数据库中更新它的父级(当前为空)。

我有:

# skip the Alpha
for x in range(2, i+1):
    on_level = 'ORG_LEVEL' + str(x)
    parent_level =  'ORG_LEVEL' + str(x-1)

    cur.execute('''SELECT ?, ?
                        FROM OsuOrgs
                        WHERE ORG_LEVEL= ? ''', 
                        [ on_level, parent_level, x ])

    for row in cur.fetchall():
        members.append( { "unv_id":str(row[0]), "parent":str(row[1]) } )

for member in members:
    print(member)

我遇到的问题是我的members []对象正在填充on_level和parent_level的litteral值。我的假设是与pyodbc如何传递参数有关,但我有点难以理解为什么会发生这种情况。

示例:

{'parent': 'ORG_LEVEL7', 'unv_id': 'ORG_LEVEL8'}
{'parent': 'ORG_LEVEL7', 'unv_id': 'ORG_LEVEL8'}
{'parent': 'ORG_LEVEL7', 'unv_id': 'ORG_LEVEL8'}
{'parent': 'ORG_LEVEL7', 'unv_id': 'ORG_LEVEL8'}
{'parent': 'ORG_LEVEL7', 'unv_id': 'ORG_LEVEL8'}
{'parent': 'ORG_LEVEL7', 'unv_id': 'ORG_LEVEL8'}
{'parent': 'ORG_LEVEL7', 'unv_id': 'ORG_LEVEL8'}
{'parent': 'ORG_LEVEL7', 'unv_id': 'ORG_LEVEL8'}

1 个答案:

答案 0 :(得分:2)

您可能需要更改

cur.execute('''SELECT ?, ?
                    FROM OsuOrgs
                    WHERE ORG_LEVEL= ? ''', 
                    [ on_level, parent_level, x ])

cur.execute('''SELECT {0}, {1} 
                    FROM OsuOrgs
                    WHERE ORG_LEVEL= ? '''.format(on_level, parent_level), 
                    x )