To control how database types are mapped into Python objects when results are fetched from the database server, conversion callbacks can be registered.
Callbacks are registered using the module level register_converter method. This method is called with the database type as the first parameter and the conversion function as the second parameter. For example, to request that sqlanydb create Decimal objects for data in any column described as having type DT_DECIMAL, you would use the following example:
import sqlanydb import decimal def convert_to_decimal(num): return decimal.Decimal(num) sqlanydb.register_converter(sqlanydb.DT_DECIMAL, convert_to_decimal) |
Converters may be registered for the following database types:
DT_DATE DT_TIME DT_TIMESTAMP DT_VARCHAR DT_FIXCHAR DT_LONGVARCHAR DT_DOUBLE DT_FLOAT DT_DECIMAL DT_INT DT_SMALLINT DT_BINARY DT_LONGBINARY DT_TINYINT DT_BIGINT DT_UNSINT DT_UNSSMALLINT DT_UNSBIGINT DT_BIT |
The following example demonstrates how to convert decimal results to integer resulting in the truncation of any digits after the decimal point. Note that the salary amount displayed when the application is run is an integral value.
import sqlanydb def convert_to_int(num): return int(float(num)) sqlanydb.register_converter(sqlanydb.DT_DECIMAL, convert_to_int) # Create a connection object, then use it to create a cursor con = sqlanydb.connect( userid="DBA", password="sql" ) cursor = con.cursor() # Execute a SQL string sql = "SELECT * FROM Employees WHERE EmployeeID=105" cursor.execute(sql) # Get a cursor description which contains column names desc = cursor.description print len(desc) # Fetch all results from the cursor into a sequence, # display the values as column name=value pairs, # and then close the connection rowset = cursor.fetchall() for row in rowset: for col in range(len(desc)): print "%s=%s" % (desc[col][0], row[col] ) print cursor.close() con.close() |
Discuss this page in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |