Alo*_*hor 1 python postgresql psycopg2
我正在使用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
Run Code Online (Sandbox Code Playgroud)
rows[0]['amount']是decimal.Decimal类的对象。有没有简单干净的方法来获取这个值float?我不想float(rows[0]['amount'])手动将其转换为浮动。
摘要 - 您可以根据查询中返回类型的 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)
Run Code Online (Sandbox Code Playgroud)
看 -
您还可以在 SQL 本身中进行强制转换 - select userid, amount::float from some_table ...,但这似乎违反了避免特定强制转换的要求。