Вот решение, использующее драйвер pythonnet и Oledb Jet. Обратите внимание, что это не сохраняет порядок первичных ключей в качестве столбцов:
import clr
import System
import System.Data.OleDb
from System.Data.OleDb import OleDbSchemaGuid
def getKeyNames(tableName, mdbname):
conn = System.Data.OleDb.OleDbConnection()
conn.ConnectionString = ("Provider=Microsoft.Jet.OLEDB.4.0;"
"Data source={}".format(mdbname))
conn.Open()
returnList=[]
mySchema = (conn).GetOleDbSchemaTable(OleDbSchemaGuid.Primary_Keys,
[None, None, tableName])
columnOrdinalForName = mySchema.Columns["COLUMN_NAME"].Ordinal
for r in mySchema.Rows:
returnList.append(r.ItemArray[columnOrdinalForName])
conn.Close()
return returnList
getKeyNames(table_name,mdbname)
здесь решение в .NET: http://stackoverflow.com/questions/862749/how-to-get-the-primary-key-of-an-ms-access-table-in-c-sharp – denfromufa