对不起,如果标题不准确,我不能100%确定它描述的情况正确:
我正尝试使用Python的ctypes模块与FreeTDS C库连接。我有一些代码运行得非常好,但遇到了一个问题。我不知道如何将下面的dbbind()调用的最后一个参数转换成ctypes。
我所遵循的C示例是:
/* these variable types are defined in the FreeTDS library */
DBINT customer_id;
DBCHAR company_name[255];
DBFLT8 avg_income;
/* */
/* Now bind the returned columns to the variables */
/* BYTE is defined in the FreeTDS library */
dbbind(dbconn, 1, INTBIND, 0, (BYTE *)&customer_id);
dbbind(dbconn, 2, NTBSTRINGBIND, 0, (BYTE *)&company_name);
dbbind(dbconn, 3, FLT8BIND, 0, (BYTE*)&avg_income);所以,A)如何在Python中将我的变量定义为库中的变量类型,以及B)如何将“(BYTE *)& company_name”等翻译成ctypes调用?
谢谢!
解决方法:感谢祖金,我能够解决以下问题:
import ctypes as ct
#
cid = ct.c_int()
cname = ct.create_string_buffer(256)
cavgincome = ct.c_float()
dtlib.dbbind(cdbconn, 1, INTBIND, 0, ct.byref(cid))
dtlib.dbbind(cdbconn, 2, NTBSTRINGBIND, 0, cname)
dtlib.dbbind(cdbconn, 3, REALBIND, 0, ct.byref(cavgincome))
while dtlib.dbnextrow(cdbconn) != NO_MORE_ROWS:
print '%s | %s | %s' % (cid, cname.value, cavgincome)