2010-09-26 25 views
1

如何獲得MySQLdb列類型的文本描述?如何獲取列寬類型MySQLdb?

我知道cursor.description包含代表 列的型號也有模塊FIELD_TYPE.*與詮釋常量像FIELD_TYPE.ENUM=247

例如,我怎麼能得到列類型的名字,如果我知道這是「3」 ?

回答

3

這裏閱讀列類型的列表:

http://mysql-python.sourceforge.net/MySQLdb-1.2.2/public/MySQLdb.constants.FIELD_TYPE-module.html

,然後創建從提供的列表的字典:

field_type = { 
0: 'DECIMAL', 
1: 'TINY', 
2: 'SHORT', 
3: 'LONG', 
4: 'FLOAT', 
5: 'DOUBLE', 
6: 'NULL', 
7: 'TIMESTAMP', 
8: 'LONGLONG', 
9: 'INT24', 
10: 'DATE', 
11: 'TIME', 
12: 'DATETIME', 
13: 'YEAR', 
14: 'NEWDATE', 
15: 'VARCHAR', 
16: 'BIT', 
246: 'NEWDECIMAL', 
247: 'INTERVAL', 
248: 'SET', 
249: 'TINY_BLOB', 
250: 'MEDIUM_BLOB', 
251: 'LONG_BLOB', 
252: 'BLOB', 
253: 'VAR_STRING', 
254: 'STRING', 
255: 'GEOMETRY' } 
0
select * from information_schema.tables 

包含你想知道關於表的一切:) ..例如輸出(我用漂亮的格式\ g開關):

.... 
*************************** 87. row *************************** 
    TABLE_CATALOG: NULL 
    TABLE_SCHEMA: phpmyadmin 
    TABLE_NAME: pma_table_coords 
    TABLE_TYPE: BASE TABLE 
     ENGINE: MyISAM 
     VERSION: 10 
    ROW_FORMAT: Dynamic 
    TABLE_ROWS: 29 
AVG_ROW_LENGTH: 39 
    DATA_LENGTH: 1156 
MAX_DATA_LENGTH: 281474976710655 
    INDEX_LENGTH: 4096 
     DATA_FREE: 0 
AUTO_INCREMENT: NULL 
    CREATE_TIME: 2010-02-09 11:19:59 
    UPDATE_TIME: 2010-08-15 19:21:37 
    CHECK_TIME: 2010-08-16 18:34:18 
TABLE_COLLATION: utf8_bin 
     CHECKSUM: NULL 
CREATE_OPTIONS: 
    TABLE_COMMENT: Table coordinates for phpMyAdmin PDF output 
... 

SHOW COLUMNS FROM table;顯示所有你想知道的columsn ...

mysql> show columns from pma_designer_coords; 
+------------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+------------+-------------+------+-----+---------+-------+ 
| db_name | varchar(64) | NO | PRI |   |  | 
| table_name | varchar(64) | NO | PRI |   |  | 
| x   | int(11)  | YES |  | NULL |  | 
| y   | int(11)  | YES |  | NULL |  | 
| v   | tinyint(4) | YES |  | NULL |  | 
| h   | tinyint(4) | YES |  | NULL |  | 
+------------+-------------+------+-----+---------+-------+ 
6 rows in set (0.00 sec) 
+0

我的問題是關於python模塊MySQLdb API。我知道我可以查詢Db,這不是我所需要的(我的意思是,MySQLdb的「遊標」已經有這個信息,但我不知道如何得到它b \ c api文檔不清楚)。 – asdf 2010-09-26 16:04:08

+1

oh,k sry .......... – 2010-09-26 17:54:31

-1

mysql.connector具有的FieldType的中的get_info()方法提供這些信息:

import mysql.connector  
from mysql.connector import FieldType 

... 
cursor.execute("SELECT emp_no, last_name, hire_date " 
       "FROM employees WHERE emp_no = %s", (123,)) 
for i in range(len(cursor.description)): 
    print("Column {}:".format(i+1)) 
    desc = cursor.description[i] 
    print("column_name = {}".format(desc[0])) 
    print("type = {} ({})".format(desc[1], FieldType.get_info(desc[1]))) 
    print("null_ok = {}".format(desc[6])) 
    print("column_flags = {}".format(desc[7])) 

代碼從http://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-description.html

+1

當使用一小段代碼直接回答問題時,直接從外部源發佈代碼有時會很有用,但只是傾倒一堆線並告訴OP在那裏尋找他/她的答案 - 沒有解釋 - 並不是非常有幫助。 (問題提出並回答後的三年甚至更少) – dg99 2014-01-14 23:21:57

+0

@ dg99 對不起,您發現我的回答「不是非常有幫助」,但最初的回答不是OP要找的。我可以通過閱讀他們的評論和第一個答案的海報中的回覆「哦,k sry」來得知。 這就是爲什麼我回答,即使是三年後。 我明確指出,FieldType的get_info()方法提供了OP正在查找的信息,然後通過鏈接提供了實際mysql文檔中的代碼行。在那裏我學會了它,只是與OP共享它。 堆棧溢出一直對我很好,只是試圖回報 – quizdog 2015-03-04 21:48:44

+0

然而,接受的答案顯然是OP所期待的。我可以通過查看答案旁邊的綠色複選標記來判斷。 – dg99 2015-03-04 23:11:30