Search code examples
pythonms-accessms-access-2007pyodbc

Select column names in a table using PyODBC


I'm writing a Python program that selects some data from a Microsoft Access mdb file using PyODBC.

I need to discover the column names of several different tables. In SQL Server, this can be accomplished by using a query like

SELECT c.name FROM sys.columns c, sys.tables t
WHERE c.object_id = t.object_id
AND t.name = tableName

But that query doesn't work in Access. With

SELECT MSysObjects.Name FROM MSysObjects
WHERE (((MSysObjects.Flags)=0) AND ((MSysObjects.Type)=1))
ORDER BY MSysObjects.Name

I can get a list of non-linked table names, but MSysObject doesn't seem to contain a list of column names.

Is there a way to use SQL to grab the column names of a table in an Access database?


Solution

  • I was unable to find an SQL query to accomplish this. However, I did discover that PyODB has a cursor method that can return a list of columns

    # columns in table x
    for row in cursor.columns(table='x'):
        print row.column_name