cursor.execute("select my-nr, my-dt-my from mytable")
row = cursor.fetchone()
print(row.my-nr, row.my-dt-my)
这个错误的名称不确定:'nr' 未定义的名称“ DT” 未定义的名字“my'
我猜想这与减去符号有关。在印刷中(row.my-nr,row.my-dt-my)
很容易从数据库中打印出表名称和列名,但由于某种原因,打印行更难。
任何想法如何打印行?
PyodBC允许我们使用表单
pyodbc.Row
row.column_name
对象中引用值,但前提是列名是合法的Python标识符。因此,例如,我们可以做类似的事情
row = crsr.fetchone()
print(row.city)
打印“城市”列的价值。不幸的是,my-nr
不是合法的python标识符,因此,如果我们尝试使用...打印“ my-nr”列的值
row = crsr.fetchone()
print(row.my-nr) # error
row.my
减
nr
”,其中
row.my
将解释为行对象中的一列,nr
将被解释为python变量。
要解决问题,我们可以获取列名的列表,将这些名称与行值合并到字典中,然后参考字典中的值:
crsr.execute(sql)
col_names = [x[0] for x in crsr.description]
row = crsr.fetchone()
row_as_dict = dict(zip(col_names, row))
print(row_as_dict["my-nr"]) # no error
或我们可以简单地使用__getattribute__()
row = crsr.fetchone()
print(row.__getattribute__("my-nr"))
我能想到的最简单的解决方案就是这个。首先,需要在OpenEdge中引用包含连字符的列(在此处查看)。其次,您可以别名这些列,因此可以将其引用为有效的Python属性。您需要做这样的事情:
cursor.execute('select "my-nr" as mynr, "my-dt-my" as mydtmy from mytable')
row = cursor.fetchone()
print(row.mynr, row.mydtmy)