Python中等同于JDBC DatabaseMetaData的是什么?
Python中相当于DatabaseMetaData的是什么?
2 个回答
0
如果你愿意使用ODBC来访问数据,那么你可以使用pyodbc,具体信息可以查看这个链接:http://code.google.com/p/pyodbc/wiki/Features。pyodbc让你可以调用一些函数,比如SQLTables,这个函数和JDBC中的getTables函数是一样的。JDBC和ODBC获取元数据的函数非常相似。
7
这个回答并不是专门针对Python的;其实我也不知道Python的数据驱动是否有这种功能。不过,也许这些信息对你有帮助。
ANSI SQL-92和SQL-99标准要求有一个叫做INFORMATION_SCHEMA的架构,它用来存储关于数据库中表的信息。
你想要的元数据可以通过对这个架构中的视图进行查询来获取。
比如:
select column_name, is_nullable, data_type, character_maximum_length as maxlen
from information_schema.columns
where table_name = 'Products'
并不是所有的数据库都实现了这个标准的部分。比如,Oracle就没有实现。
幸运的是,还有一些特定于数据库的表可以存储这类信息。
虽然Microsoft SQL Server支持Information_Schema,但它还有一些特定于SQL Server的表,可以提供更多的元数据信息。这些表是[CatalogName].dbo.sysobjects
和[CatalogName].dbo.sysolumns
。对这些表进行类似的查询也能得到你想要的元数据。举个例子:
select * from [CatalogName].dbo.syscolumns
where id =
(Select id from [CatalogName].dbo.sysobjects where name = 'Products')
在Oracle中,ALL_TAB_COLUMNS表可以提供这些信息:
select column_name, data_type, data_length, data_precision, data_scale
from ALL_TAB_COLUMNS
where table_name = 'EMP';
无论你是查询标准视图还是数据库特定的视图,你都不需要ODBC来执行这些查询——你可以使用任何可用的数据库连接来获取操作数据,当然这要符合安全审批的要求。