Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az mssql-python kurzorosztály kilenc metaadat-módszert biztosít, amelyek az ODBC katalógusfüggvényekhez fordulnak. Ezeket a módszereket használja táblázatok, oszlopok, tárolt eljárások, kulcsok és indexek felfedezésére programozóen. Segítenek adatvezérelt alkalmazásokat építeni, amelyek futásidőben alkalmazkodnak az adatbázis sémájához, például migrációs eszközöket, kódgenerátorokat vagy adminisztrátori irányítópultokat.
| Módszer | ODBC függvény | Returns | Mikor érdemes használni? |
|---|---|---|---|
tables() |
SQLTables | Táblázat- és nézetinformáció. | Készletadatbázisok. Ellenőrizd a tábla létezését lekérdezések előtt. |
columns() |
SQLColumns | Oszlop részletei. | DDL generálása, dinamikus lekérdezések összeállítása, vagy oszlopok kódhoz rendelése. |
procedures() |
SQLProcedures | Tárolt eljárási információk. | Fedezze fel az elérhető API-kat. Generálj eljárás híváscsomagokat. |
primaryKeys() |
SQLPrimaryKeys | Az elsődleges kulcs oszlopai. | Határozza meg az egyedi sorazonosítókat a(z) UPDATE/DELETE műveletekhez. |
foreignKeys() |
SQLForeignKeys | Külföldi kulcskapcsolatok. | Térképezd le a táblakapcsolatokat, határozd meg törlési sorrendet a tisztító szkriptekhez. |
statistics() |
SQLStatistics | Index- és statisztikai információk. | Ellenőrizd az index lefedettséget a teljesítményhangoláshoz. |
rowIdColumns() |
SQLSpecialColumns (ROWID) | Egyedi sorazonosító oszlopok. | Találd meg a legjobb oszlopokat a konkrét sorok azonosítására. |
rowVerColumns() |
SQLSpecialColumns (ROWVER) | Sorverzió oszlopok. | Implementálja az optimista párhuzamosságkezelést (az egyidejű módosítások észlelése). |
getTypeInfo() |
SQLGetTypeInfo | Adattípus-információk. | Fedezze fel a támogatott típusokat a többplatformos kompatibilitáshoz. |
Minden módszer egy kurzort ad vissza, amit iterálhatsz, hogy hozzáférj az eredményekhez.
Tables
Listázd fel a táblákat és nézeteket az adatbázisban:
cursor = conn.cursor()
# List all tables
for row in cursor.tables():
print(f"{row.table_schem}.{row.table_name} ({row.table_type})")
# Filter by name (supports wildcards % and _)
for row in cursor.tables(table="Product%"):
print(row.table_name)
# Filter by schema
for row in cursor.tables(schema="Sales"):
print(row.table_name)
# Filter by type
for row in cursor.tables(tableType="TABLE"): # Excludes views
print(row.table_name)
táblázat() paraméterek
A következő paraméterek szabályozzák a táblázat felfedezését:
| Paraméter | Leírás |
|---|---|
table |
A táblanév mintája (támogatja a(z) % és _ helyettesítő karaktereket). |
catalog |
Katalógus (adatbázis) név. |
schema |
Séma névmintázat. |
tableType |
Szűrő típus szerint: TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARYLOCAL TEMPORARYALIAS, . SYNONYM |
táblázat() eredményoszlopok
A tables() módszer minden tábla vagy nézet esetében a következő oszlopokat adja vissza:
| Column | Leírás |
|---|---|
table_cat |
Katalógus (adatbázis) név. |
table_schem |
Séma neve. |
table_name |
Táblázat vagy név megtekintése. |
table_type |
TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARY, LOCAL TEMPORARYALIAS, , SYNONYM. |
remarks |
Leírás vagy hozzászólások. |
Nézd meg, van-e táblázat
Ellenőrizd, hogy létezik-e tábla, mielőtt lekérdeznéd:
if cursor.tables(table="Product", schema="Production").fetchone():
print("Product table exists")
else:
print("Product table not found")
Columns
Táblázatok oszlopinformációinak lekérése:
# All columns in a table
for row in cursor.columns(table="Product", schema="Production"):
print(f"{row.column_name}: {row.type_name}({row.column_size})")
print(f" Nullable: {row.nullable}, Position: {row.ordinal_position}")
# Filter by column name
for row in cursor.columns(table="Product", schema="Production", column="List%"):
print(row.column_name)
columns() paraméterek
Szűrők az oszlopok felderítésének finomításához:
| Paraméter | Leírás |
|---|---|
table |
Táblanév mintája. |
catalog |
Katalógus (adatbázis) név. |
schema |
Séma névmintázat. |
column |
Oszlopnév mintázat. |
columns() eredményoszlopok
A columns() módszer részletes információkat ad minden oszlopról:
| Column | Leírás |
|---|---|
| \ |
Helyszínazonosítók. |
column_name |
Oszlop neve. |
data_type |
SQL adattípus kód. |
type_name |
Adattípus név (például , varcharint). |
column_size |
Maximális hossz vagy pontosság. |
buffer_length |
Pufferméret az átvitelekhez. |
decimal_digits |
Skála a numerikus típusokhoz. |
nullable |
0 a nem null értékhez, 1 a null értéket megengedőhöz. |
column_def |
Alapértelmezett érték. |
ordinal_position |
Oszlop pozíciója (1-től indexelve). |
is_nullable |
"YES" vagy "NO". |
Tárolt eljárások
Fedezze fel a tárolt eljárásokat:
# List all procedures
for row in cursor.procedures():
print(f"{row.procedure_schem}.{row.procedure_name}")
# Filter by name pattern
for row in cursor.procedures(procedure="Get%"):
print(row.procedure_name)
eljárás() paraméterek
Tárolt eljárások szűrése név vagy séma szerint:
| Paraméter | Leírás |
|---|---|
procedure |
Eljárás névmintázat. |
catalog |
Katalógus (adatbázis) név. |
schema |
Séma névmintázat. |
eljárások() eredményoszlopok
A procedures() módszer minden tárolt eljáráshoz metaadatokat ad vissza:
| Column | Leírás |
|---|---|
procedure_cat, procedure_schem |
Helyszínazonosítók. |
procedure_name |
Eljárás neve. |
num_input_params |
A bemeneti paraméterek száma. |
num_output_params |
Kimeneti paraméterek száma. |
num_result_sets |
Eredményhalmazok száma. |
remarks |
Description. |
procedure_type |
Típusjelző. |
Elsődleges kulcsok
Szerezz elsődleges kulcsoszlopokat egy táblázathoz:
for row in cursor.primaryKeys(table="Product", schema="Production"):
print(f"PK column: {row.column_name} (position {row.key_seq})")
print(f"Constraint name: {row.pk_name}")
primaryKeys() paraméterek
Paraméterek az elsődleges kulcsinformációk visszaszerzéséhez:
| Paraméter | Leírás |
|---|---|
table |
Tábla név (kötelező). |
catalog |
Katalógus (adatbázis) név. |
schema |
Séma neve. |
primaryKeys() eredményoszlopok
A primaryKeys() módszer a következő információkat adja vissza:
| Column | Leírás |
|---|---|
| \ |
Helyszínazonosítók. |
column_name |
Oszlop az elsődleges kulcsban. |
key_seq |
Pozíció többoszlopos kulcsban (1-bázisú). |
pk_name |
Elsődleges kulcskorlát neve. |
Idegen kulcsok
Fedezze fel a külföldi kulcskapcsolatokat:
# Foreign keys from a table (outbound references)
for row in cursor.foreignKeys(table="SalesOrderDetail", schema="Sales"):
print(f"FK {row.fk_name}:")
print(f" {row.fktable_name}.{row.fkcolumn_name}")
print(f" -> {row.pktable_name}.{row.pkcolumn_name}")
# Foreign keys to a table (inbound references)
for row in cursor.foreignKeys(foreignTable="Product", foreignSchema="Production"):
print(f"{row.fktable_name} references Product")
foreignKeys() paraméterek
Határozz meg elsődleges kulcs- vagy idegen kulcstáblákat a kapcsolatok felfedezéséhez:
| Paraméter | Leírás |
|---|---|
table |
Az elsődleges kulcs táblájának neve. |
catalog |
Elsődleges kulcskatalógus. |
schema |
Elsődleges kulcsséma. |
foreignTable |
Az idegen kulcs táblaneve. |
foreignCatalog |
Külföldi kulcskatalógus. |
foreignSchema |
Külföldi kulcs séma. |
foreignKeys() eredményoszlopok
A foreignKeys() módszer a következő oszlopokat adja vissza, amelyek a kapcsolatokat írják le:
| Column | Leírás |
|---|---|
| \ |
Hivatkozott (elsődleges) táblázat. |
pkcolumn_name |
Hivatkozott oszlop. |
| \ |
Hivatkozási (külföldi) táblázat. |
fkcolumn_name |
Hivatkozó oszlop. |
key_seq |
Pozíció többoszlopos kulcsban. |
update_rule |
Művelet itt: UPDATE. |
delete_rule |
Művelet a következőn: DELETE. |
fk_name |
Idegen kulcs megkötött név. |
pk_name |
Elsődleges kulcskorlát neve. |
Indexek és statisztikák
Szerezz index információkat egy táblázathoz:
# All indexes on a table
for row in cursor.statistics(table="Product", schema="Production"):
if row.index_name: # Skip table statistics row
print(f"Index: {row.index_name}")
print(f" Column: {row.column_name} (position {row.ordinal_position})")
print(f" Unique: {not row.non_unique}")
# Only unique indexes
for row in cursor.statistics(table="Product", schema="Production", unique=True):
print(f"Unique index: {row.index_name}")
statisztika() paraméterek
Az indexfelderítést az alábbi szűrőkkel konfiguráljuk:
| Paraméter | Default | Leírás |
|---|---|---|
table |
(required) | Tábla neve. |
catalog |
None | Katalógus (adatbázis) név. |
schema |
None | Séma neve. |
unique |
False | Csak egyedi indexeket adnak vissza. |
quick |
True | Hagyd ki a költséges kardinalitás-/oldallekérést. |
statisztikák() eredményoszlopok
A statistics() módszer indexet és statisztikai információkat hoz, amelyek a következőket eredményezik:
| Column | Leírás |
|---|---|
| \ |
Helyszínazonosítók. |
non_unique |
0 egyedi esetén, 1 nem egyedi esetén. |
index_name |
Index neve. |
type |
Index típusa. |
ordinal_position |
Az oszlop pozíciója az indexben. |
column_name |
Oszlop neve. |
asc_or_desc |
A A felemelkedésre, D a leszállásra. |
cardinality |
Sorok számának becslése. |
pages |
Oldalszám. |
Sorazonosító oszlopok
Találj olyan oszlopokat, amelyek egyediségesen azonosítanak egy sort:
for row in cursor.rowIdColumns(table="Product", schema="Production"):
print(f"Row ID column: {row.column_name} ({row.type_name})")
Ez a módszer a legjobb oszlophalmazt adja vissza, hogy egyedileg azonosítsanak egy sort, ami lehet a fő kulcs vagy egy egyedi index.
Sorverziós oszlopok
Keress olyan oszlopokat, amelyek automatikusan frissülnek, ha bármely sorérték megváltozik. Használj sorverziós oszlopokat optimista egyidejű vezérléshez, ahol elolvasod a sor verzióját, módosíthatsz, majd ellenőrizd, hogy a jelenlegi sorverzió ugyanaz-e, mielőtt írnád:
for row in cursor.rowVerColumns(table="Product", schema="Production"):
print(f"Version column: {row.column_name}")
Az eredmény jellemzően az optimista konkurenciakezeléshez használt rowversion/timestamp oszlopokat tartalmazza.
Adattípus adatai
Információt kapjon a támogatott SQL adattípusokról:
# All supported types
for row in cursor.getTypeInfo():
print(f"{row.type_name}: {row.data_type}")
print(f" Max size: {row.column_size}")
print(f" Nullable: {row.nullable}")
# Specific type
for row in cursor.getTypeInfo(sqlType=mssql_python.SQL_VARCHAR):
print(f"VARCHAR max size: {row.column_size}")
getTypeInfo() paraméterek
Opcionális paraméterek a támogatott SQL típusok szűréséhez:
| Paraméter | Leírás |
|---|---|
sqlType |
SQL típusállandó (minden típus esetén kihagyva). |
Biztonsági megfontolások
Caution
Ezek a módszerek adatbázis-séma metaadatokat tárnak fel. Bár maguk a metódusok biztonságosan végrehajthatók, a visszaküldött információk felfedik az adatbázis szerkezetét (táblanevek, oszlopnevek, kapcsolatok, adattípusok).
- Ne tegyen fel nyers metaadatokat megbízhatatlan felhasználóknak.
- Eredmények tisztítása vagy szűrése több-bérlős alkalmazásokban.
- Korlátozzuk a hozzáférést külső alkalmazásokban.
Példa: Sémajelentés generálása
def describe_table(conn, table_name):
"""Generate a schema description for a table."""
cursor = conn.cursor()
print(f"\n=== {table_name} ===\n")
# Columns
print("Columns:")
for col in cursor.columns(table=table_name):
nullable = "NULL" if col.nullable else "NOT NULL"
print(f" {col.column_name}: {col.type_name}({col.column_size}) {nullable}")
# Primary key
print("\nPrimary Key:")
pk_cols = cursor.primaryKeys(table=table_name).fetchall()
if pk_cols:
pk_names = ", ".join(row.column_name for row in pk_cols)
print(f" {pk_cols[0].pk_name}: ({pk_names})")
else:
print(" (none)")
# Foreign keys
print("\nForeign Keys:")
for fk in cursor.foreignKeys(table=table_name):
print(f" {fk.fk_name}: {fk.fkcolumn_name} -> {fk.pktable_name}.{fk.pkcolumn_name}")
# Indexes
print("\nIndexes:")
for idx in cursor.statistics(table=table_name):
if idx.index_name:
unique = "UNIQUE " if not idx.non_unique else ""
print(f" {unique}{idx.index_name}: {idx.column_name}")
# Usage
describe_table(conn, "Product")