|
Deron Meranda
deron.meranda at gmail.com
Wed Feb 1 12:56:24 EST 2006
Unfortunately there is no portable way to do this--DESCRIBE is a
proprietary verb. The official ISO standard SQL way is to query the
INFORMATION_SCHEMA pseudo-tables. Such as
select KU.COLUMN_NAME
from INFORMATION_SCHEMA.KEY_COLUMN_USAGE KU
where KU.TABLE_NAME = 'mytable'
and KU.CONSTRAINT_NAME = 'PRIMARY'
order by KU.ORDINAL_POSITION;
This works in the PySybase adapter (which is also used to connect
to MS SQLServer), and also MySQL 5. See
http://dev.mysql.com/doc/refman/5.0/en/information-schema.html
But it's still not completely portable, because so many DB
vendors don't yet support the standard INFORMATION_SCHEMA.
Oracle tends to use the DESCRIBE way. In MySQL < 5, you
have SHOW (like SHOW CREATE TABLE).
Fortunately with Python, at least part of the meta-data is
available in a standardized way using the DBAPI.
Perhaps you should check up on what the Python DB_SIG group
says, or is doing. If it's not in the works, or rejected, perhaps
you can suggest a Pythonic standard way to query meta data.
--
Deron Meranda
|