2011-12-16 19 views
2

psycopg2的doc,對如何具體的類型轉換爲不同類型的指令:psycopg2 - 怎麼老是投不字符串值串

Psycopg小數/數字數據庫類型轉換成Python十進制對象。我可以有浮動嗎?
您可以註冊PostgreSQL的十進制類型定義適配器:

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) 

但我的數據將有海峽,浮點,整數,小數,日期類型等的混合物,我怎麼告訴psycopg2投任何非字符串值的字符串?我不想在每次遇到新類型時註冊一個自定義適配器,因爲我的查詢可能會更改。
我希望我能讓情況變得足夠清晰。 在此先感謝。

回答

3

你可以刪除所有typecasters和接收Postgres的字符串表示一切:

import psycopg2 

for k in psycopg2.extensions.string_types.keys(): 
    del psycopg2.extensions.string_types[k] 

cnn = psycopg2.connect('') 
cur = cnn.cursor() 
cur.execute("select 1::int, now()::timestamp, 'hello'::text") 
cur.fetchone() 
('1', '2011-12-19 16:50:11.396855', 'hello') 
+0

令人難以置信!非常感謝。 – BPm 2011-12-19 20:48:09

0

也許足夠的通話str(object)或採取現場STR像object.__str__

+0

查詢將返回一個列表的列表:`[ [bool,str,int],[float,datetime,] ...]如果我使用str(obj),我需要迭代大列表中的所有內容。我不認爲它是有效的。 – BPm 2011-12-16 23:18:32