如何使用pyodbc获取Access数据库中特定字段的数据类型?
3 个回答
0
你可以从这个输出中获取一些信息:
import pandas as pd
dbq='D:\....\xyz.accdb'
conn=pyodbc.connect(r"Driver={Microsoft Access Driver (*.mdb, *.accdb)}; Dbq=%s;" %(dbq))
query = 'select * from tablename'
dataf = pd.read_sql(query, conn)
print(list(dataf.dtypes))
2
我对pyodbc不太熟悉,不过我以前在VBA里做过类似的事情。
你提到的那两个链接是针对SQL Server的,不是Access的。如果想知道Access表中每个字段的数据类型,可以使用DAO或ADOX。
这里有一个我在Excel 2010中用VBA做的例子,我连接到Access数据库(2000 mdb格式),并列出了表、字段及其数据类型(比如用枚举表示,'4'代表dbLong)。你可以在输出中看到系统表,底部是用户创建的表。
在网上你可以很容易找到关于如何用ADOX做类似事情的例子。希望这对你有帮助。
Private Sub TableDefDao()
Dim db As DAO.Database
Set db = DAO.OpenDatabase("C:\Database.mdb")
Dim t As DAO.TableDef
Dim f As DAO.Field
For Each t In db.TableDefs
Debug.Print t.Name
For Each f In t.Fields
Debug.Print vbTab & f.Name & vbTab & f.Type
Next
Next
End Sub
8
那些文章对你没有帮助的原因是,它们是针对SQL Server的。SQL Server有系统表,你可以查询这些表来获取列的数据,而MS Access没有这样的功能。MS Access只能让你查询对象的名称。
不过,ODBC确实支持通过它的连接获取架构信息,这可以通过ODBC.SQLColumns函数来实现。
根据这个回答,PyODBC通过一个游标方法提供了这个功能。
# columns in table x
for row in cursor.columns(table='x'):
print row.column_name
正如Mark在评论中提到的,你可能还想要row.data_type。 他提供的链接包含了它提供的所有列信息。
- table_cat
- table_schem
- table_name
- column_name
- data_type
- type_name
- column_size
- buffer_length
- decimal_digits
- num_prec_radix
- nullable
- remarks
- column_def
- sql_data_type
- sql_datetime_sub
- char_octet_length
- ordinal_position
- is_nullable: 可能的值有SQL_NULLABLE, SQL_NO_NULLS, SQL_NULLS_UNKNOWN。