天天看點

Python擷取access表字段名

以下所有代碼Python2.7、Python3.4均可用。

一、win32.com

<code>#author: walker</code>

<code>#date: 2015-09-25</code>

<code>#summary: 列印指定access檔案、指定表的所有字段</code>

<code>import</code> <code>win32com.client</code>

<code>def</code> <code>PrintColumns_win32com(pathfile, tablename):</code>

<code>    </code><code>conn </code><code>=</code> <code>win32com.client.Dispatch(r</code><code>'ADODB.Connection'</code><code>)</code>

<code>    </code><code>DSN </code><code>=</code> <code>'PROVIDER=Microsoft.ACE.OLEDB.12.0;DATA SOURCE='</code> <code>+</code> <code>pathfile </code><code>+</code> <code>';'</code>

<code>    </code><code>#DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=' + pathfile + ';'</code>

<code>    </code><code>conn.</code><code>Open</code><code>(DSN)</code>

<code>      </code> 

<code>    </code><code>rs </code><code>=</code> <code>win32com.client.Dispatch(r</code><code>'ADODB.Recordset'</code><code>)</code>

<code>    </code><code>rs.Cursorlocation </code><code>=</code> <code>3</code>

<code>    </code><code>sql </code><code>=</code> <code>'SELECT TOP 1 * FROM '</code> <code>+</code> <code>tablename</code>

<code>    </code><code>print</code><code>(sql)</code>

<code>    </code><code>rs.</code><code>Open</code><code>(sql, conn)</code>

<code>    </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>0</code><code>, rs.Fields.Count):</code>

<code>        </code><code>print</code><code>(rs.Fields[i].Name </code><code>+</code> <code>' - '</code> <code>+</code> <code>str</code><code>(rs.Fields[i].</code><code>Type</code><code>) </code><code>+</code> <code>' - '</code> <code>+</code> <code>str</code><code>(rs.Fields[i].DefinedSize))</code>

<code>    </code><code>conn.Close()</code>

關于字段類型(Type):3為數字,202為文本,203為備忘。

相關閱讀:

二、pyodbc

<code>#encoding=utf-8</code>

<code>import</code> <code>pyodbc</code>

<code>def</code> <code>PrintColumns_pyodbc(pathfile, tablename):</code>

<code>    </code><code>connStr </code><code>=</code> <code>r</code><code>'Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=%s;'</code> <code>%</code> <code>pathfile</code>

<code>    </code><code>print</code><code>(</code><code>'connStr:'</code> <code>+</code> <code>connStr)</code>

<code>    </code><code>conn </code><code>=</code> <code>pyodbc.connect(connStr)</code>

<code>    </code> 

<code>    </code><code>cur </code><code>=</code> <code>conn.cursor()</code>

<code>    </code><code>for</code> <code>row </code><code>in</code> <code>cur.columns(table</code><code>=</code><code>tablename):</code>

<code>        </code><code>print</code><code>(row.column_name)</code>

<code>    </code><code>cur.close()</code>

<code>    </code><code>conn.close()</code>

相關連結:

三、pypyodbc

<code>import</code> <code>pypyodbc</code>

<code>def</code> <code>PrintColumns_pypyodbc(pathfile, tablename):</code>

<code>    </code><code>pypyodbc.lowercase </code><code>=</code> <code>False</code>  <code>#是否将字段名轉為小寫</code>

<code>    </code><code>conn </code><code>=</code> <code>pypyodbc.connect(connStr)</code>

<code>     </code> 

<code>    </code><code>cur.execute(</code><code>'SELECT TOP 1 * FROM '</code> <code>+</code> <code>tablename)</code>

<code>    </code><code>cnt </code><code>=</code> <code>0</code>

<code>    </code><code>for</code> <code>tup </code><code>in</code> <code>cur.description:</code>

<code>        </code><code>print</code><code>(tup[</code><code>0</code><code>])</code>

<code>        </code><code>cnt </code><code>+</code><code>=</code> <code>1</code>

<code>    </code><code>print</code><code>(</code><code>'cnt:'</code> <code>+</code> <code>str</code><code>(cnt))</code>

3、未找到官方文檔

四、pyodbc與pypyodbc取值的差別

(1)、在select指定字段時

row[idx]

row.field

row['field']

row.get('field')

pyodbc

 √

 ×

pypyodbc

(2)、在select *時

本文轉自walker snapshot部落格51CTO部落格,原文連結http://blog.51cto.com/walkerqt/1553180如需轉載請自行聯系原作者

RQSLT