我正在使用psycopg2来查询PostgreSQL数据库。
import psycopg2
import psycopg2.extras
DB_CONNECTION = {
'host': os.getenv('PG_HOST'),
'database': os.getenv('PG_DB_NAME'),
'user': os.getenv('PG_USER'),
'password': os.getenv('PG_PASSWORD')
}
connection = psycopg2.connect(**DB_CONNECTION)
connection.autocommit = True
cursor = connection.cursor(cursor_factory = psycopg2.extras.RealDictCursor)
# amount column type is numeric in table
query = 'SELECT userid, amount FROM some_table WHERE userid = %(userid)s'
cursor.execute(query, {'userid': 1234})
rows = cursor.fetchall()
print(rows[0]['amount']) # This is value is object of decimal.Decimal
rows[0]['amount']
是decimal.Decimal
类的对象。是否有任何简单明了的方法来将此值设为float
?我不想手动float(rows[0]['amount'])
将其转换为float。
答案 0 :(得分:0)
摘要-您可以基于查询中返回的类型的OID注册自定义类型转换函数。 psycopg2
文档给出了确切的示例:
DEC2FLOAT = psycopg2.extensions.new_type(
psycopg2.extensions.DECIMAL.values,
'DEC2FLOAT',
lambda value, curs: float(value) if value is not None else None)
psycopg2.extensions.register_type(DEC2FLOAT)
请参阅-
您还可以强制转换SQL本身-select userid, amount::float from some_table ...
,但这似乎违反了避免特定强制转换的要求。