如何让cx-oracle将查询结果绑定到字典而非元组?
这是我的代码。我想找到一种方法,让查询的结果以字典的形式返回,而不是以元组的形式返回。看起来cx_oracle支持这种方式,文档中有提到“绑定”的部分。不过我还搞不清楚具体是怎么操作的。
def connect():
dsn = cx_Oracle.makedsn("host", 1521, "sid")
orcl = cx_Oracle.connect('scott/tiger@' + dsn)
curs = orcl.cursor()
sql = "select * from sometable"
curs.execute(sql)
result = curs.fetchall()
for row in result:
print row[13] #CATEGORY field order
print row['CATEGORY'] # <- I want this to work ('CATEGORY' is the name of a field in the 'sometable' table)
curs.close()
2 个回答
0
这里有个简单粗暴的方法。如果你有更好的办法,欢迎分享。
def connect():
dsn = cx_Oracle.makedsn("host", 1521, "sid")
orcl = cx_Oracle.connect('scott/tiger@' + dsn)
curs = orcl.cursor()
sql = "select * from sometable"
curs.execute(sql)
fieldNumber = 0
fieldNames={}
for desc in curs.description:
fieldNames[desc[0]]=fieldNumber
fieldNumber+=1
result = curs.fetchall()
for row in result:
print str(row[fieldNames['CATEGORY']])
curs.close()
16
绑定变量(Bindvars)用于执行查询,比如:
通过名称(给定命名参数)
cursor = self.db.cursor() cursor.execute("SELECT bookName, author from books where Id=:bookId" , bookId="155881") print cursor.bindnames()
这会输出:['BOOKID']
通过位置,给定一个值的列表
cursor = self.db.cursor() cursor.prepare("insert into books (bookId,title,author,price) values(:1, :2, :3, :4)") cursor.executemany(None, listOfbookwhichAreTuppleOf4Field )
为了得到你想要的结果,你可以尝试这样的方式:
def connect():
dsn = cx_Oracle.makedsn("host", 1521, "sid")
orcl = cx_Oracle.connect('scott/tiger@' + dsn)
curs = orcl.cursor()
sql = "select * from sometable"
curs.execute(sql)
desc = [d[0] for d in curs.description]
result = [dict(zip(desc,line)) for line in curs]
curs.close()