SQL Anywhere 10或更高版本:
安装sqlanydb模块
以管理用户身份运行以下命令以安装 sqlanydb:
python setup.py install
或者,您可以使用pip:
pip install sqlanydb
转换器功能
这个库包装sqlanydbdbcapic库。检索时 值,则C API返回以下类型之一:
A_无效的_类型
a_二进制
一串
a_双
阿武64
A_val64
阿武32
A_val32
a_val16
阿图16
阿武8
A_val8
其他类型作为上述类型返回。例如,数字类型是 作为字符串返回
要让sqlanydb返回不同或自定义的python对象,可以注册 使用sqlanydb模块进行回调,使用 register_converter(datatype, callback)。回调是一个接受 一个参数,要转换的类型,并应返回转换后的值。 数据类型是模块中存在的DT_变量之一。
可用于注册转换器的类型:
不输入日期
日期
dt_时间
时间戳
dt_varchar
dt_fixchar
特朗瓦查尔
dt_字符串
双dt_
dt_浮点
dt_十进制
dt_int
斯莫林特酒店
dt_二进制
长二进制
迪丁因特
dt_bigint
取消打印
dt_unssmalint
dt_unsbigint
dt_位
德特朗瓦查尔
例如,要将数值类型作为python Decimal对象返回:
import decimal
def decimal_callback(valueToConvert):
return decimal.Decimal(valueToConvert)
sqlanydb.register_converter(sqlanydb.DT_DECIMAL, decimal_callback)
测试sqlanydb模块
测试到SQL Anywhere的Python接口是否正常工作 首先启动SQL Anywhere附带的演示数据库 安装,然后使用 以下内容:
import sqlanydb
conn = sqlanydb.connect(uid='dba', pwd='sql', eng='demo', dbn='demo' )
curs = conn.cursor()
curs.execute("select 'Hello, world!'")
print( "SQL Anywhere says: %s" % curs.fetchone() )
curs.close()
conn.close()
运行测试脚本并确保获得预期的输出:
> python test_sqlany.py
SQL Anywhere says: Hello, world!
老版本的使用pyodbc
字符串是con = pydobc.connect(dsn="myDSN")
import pyodbc
import pandas as pd
cnxn = pyodbc.connect("DSN=RevDSN")
print(cnxn)
data = pd.DataFrame(pd.read_sql_query(query, cnxn))
cnxn.close()
import pyodbc
cnxn = pyodbc.connect('Driver={SQL Anywhere 17};LINKS=TCPIP{HOST=<server ip here>};PORT=2638;UID=admin;PWD=<password here>;ENG=<engine name>;DBN=<database name>;')
cursor = cnxn.cursor()
cursor.execute("select top 10 * from dba.<table name>")
for row in cursor:
print(row)