2009-10-17 40 views
5

當在python中使用sqlite3模塊時,cursor.description的所有元素(列名除外)都設置爲None,因此不能使用此元組來查找查詢結果的列類型(與其他DB -API兼容模塊)。獲得列的類型的唯一方法是使用pragma table_info(table_name).fetchall()獲取表的描述,將其存儲在內存中,然後將cursor.description的列名與整個表的描述進行匹配?sqlite3和cursor.description

回答

5

不,它不是唯一的方法。或者,您也可以獲取一行,遍歷它,並檢查單個列的Python對象和類型。除非值爲無(在這種情況下,SQL字段爲NULL),否則這應該能夠非常準確地指示數據庫列類型是什麼。

sqlite3僅在一個地方使用sqlite3_column_decltypesqlite3_column_type,而且兩者都不可用於Python應用程序 - 因此它們不是您可能一直在尋找的「直接」方式。

1

我沒有在Python嘗試這樣做,但你可以嘗試像

SELECT * 
FROM sqlite_master 
WHERE type = 'table'; 

其中包含了DDL創建一個用來創建表的語句東西。通過解析DDL,您可以獲得列類型信息,例如它。請記住,就列數據類型而言,SQLITE相當模糊且不受限制。