Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
mssql-python imleç sınıfı, ODBC katalog fonksiyonlarına eşlenen dokuz meta veri yöntemi sunar. Bu yöntemleri kullanarak tabloları, sütunları, depolanmış prosedürleri, anahtarları ve indeksleri programatik olarak keşfedebilirsiniz. Veritabanı şemasına çalışma zamanında uyum sağlayan veri odaklı uygulamalar oluşturmanıza yardımcı olurlar; örneğin göç araçları, kod oluşturucular veya yönetici panelleri gibi.
| Method | ODBC fonksiyonu | İadeler | Ne zaman kullanılır? |
|---|---|---|---|
tables() |
SQLTables | Tablo ve görüntü bilgileri. | Envanter veritabanları. Sorgulardan önce tablo varlığını doğrulayın. |
columns() |
SQLColumns | Sütun detayları. | DDL oluşturun, dinamik sorgular oluşturun veya sütunları koda eşleyin. |
procedures() |
SQLProcedures | Saklanan prosedür bilgileri. | Mevcut API'leri keşfedin. Prosedür çağrı wrapper'ları oluşturun. |
primaryKeys() |
SQLPrimaryKeys | Birincil anahtar sütunlar. | / işlemler için benzersiz satır tanımlayıcılarını UPDATEDELETE belirleyin. |
foreignKeys() |
SQLForeignKeys | Yabancı anahtar ilişkileri. | Tablo ilişkilerini haritalayın, temizleme betikleri için silme sırasını belirleyin. |
statistics() |
SQLStatistics | İndeks ve istatistikler bilgileri. | Performans ayarı için indeks kapsamını doğrulayın. |
rowIdColumns() |
SQLSpecialColumns (ROWID) | Benzersiz satır tanımlayıcı sütunları. | Belirli satırları tanımlamak için en iyi sütunları bulun. |
rowVerColumns() |
SQLSpecialColumns (ROWVER) | Satır versiyonu sütunları. | İyimser eşzamanlılık uygulayın (eşzamanlı değişiklikleri tespit edin). |
getTypeInfo() |
SQLGetTypeInfo | Veri türü bilgileri. | Platformlar arası uyumluluk için desteklenen türleri keşfedin. |
Her yöntem sonuçlara erişmek için yineleme yapabileceğiniz bir imleci geri döndürüyor.
Tables
Veritabanında tabloları ve görünümleri listeleyin:
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)
tables() parametreleri
Aşağıdaki parametreler tablo keşfini kontrol eder:
| Parametre | Açıklama |
|---|---|
table |
Tablo adı deseni (% ve _ joker karakterlerini destekleyen). |
catalog |
Katalog (veritabanı) adı. |
schema |
Şema isim deseni. |
tableType |
Tipe göre filtreleyin: TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARYLOCAL TEMPORARYALIAS, , . SYNONYM |
tables() sonuç sütunları
Yöntem, tables() her tablo veya görünüm için aşağıdaki sütunları döndürür:
| Column | Açıklama |
|---|---|
table_cat |
Katalog (veritabanı) adı. |
table_schem |
Şema adı. |
table_name |
Tablo veya görünüm adı. |
table_type |
TABLE, VIEW, SYSTEM TABLE, GLOBAL TEMPORARY, LOCAL TEMPORARY, ALIAS, . SYNONYM |
remarks |
Açıklama veya yorumlar. |
Bir tablo var mı kontrol edin
Bir tabloyu sorgulamadan önce var olup olmadığını doğrulayın:
if cursor.tables(table="Product", schema="Production").fetchone():
print("Product table exists")
else:
print("Product table not found")
Kolonlar
Tablolar için sütun bilgisini alın:
# 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() parametreleri
Sütun keşfini geliştirmek için filtreler:
| Parametre | Açıklama |
|---|---|
table |
Tablo adı biçimi. |
catalog |
Katalog (veritabanı) adı. |
schema |
Şema isim deseni. |
column |
Sütun adı biçimi. |
columns() sonuç sütunları
Yöntem, columns() her sütun hakkında ayrıntılı bilgi sağlar:
| Column | Açıklama |
|---|---|
table_cat, table_schem, table_name |
Konum tanımlayıcıları. |
column_name |
Sütun adı. |
data_type |
SQL veri tipi kodu. |
type_name |
Veri tipi adı (örneğin, varchar, int). |
column_size |
Maksimum uzunluk veya hassasiyet. |
buffer_length |
Transferler için tampon boyutu. |
decimal_digits |
Sayısal tipler için ölçek. |
nullable |
0 NOT NULL için, 1 nullable için. |
column_def |
Varsayılan değer. |
ordinal_position |
Kolon konumu (1 bazlı). |
is_nullable |
"YES" veya "NO". |
Saklanan prosedürler
Saklanan prosedürleri keşfedin:
# 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)
prosedür() parametreleri
Depolanan prosedürleri isim veya şemaya göre filtreleyin:
| Parametre | Açıklama |
|---|---|
procedure |
İşlem adı modeli. |
catalog |
Katalog (veritabanı) adı. |
schema |
Şema isim deseni. |
prosedürler() sonuç sütunları
Yöntem, procedures() her depolanmış prosedür için meta veri döner:
| Column | Açıklama |
|---|---|
procedure_cat, procedure_schem |
Konum tanımlayıcıları. |
procedure_name |
Yordam adı. |
num_input_params |
Giriş parametreleri sayısı. |
num_output_params |
Çıkış parametreleri sayısı. |
num_result_sets |
Sonuç kümelerinin sayısı. |
remarks |
Açıklama. |
procedure_type |
Tip göstergesi. |
Birincil anahtarlar
Bir tablo için birincil anahtar sütunlarını alın:
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() parametreleri
Birincil anahtar bilgisini almak için parametreler:
| Parametre | Açıklama |
|---|---|
table |
Tablo adı (zorunlu). |
catalog |
Katalog (veritabanı) adı. |
schema |
Şema adı. |
primaryKeys() sonuç sütunları
Yöntem primaryKeys() aşağıdaki bilgileri geri döner:
| Column | Açıklama |
|---|---|
table_cat, table_schem, table_name |
Konum tanımlayıcıları. |
column_name |
Birincil anahtardaki sütun. |
key_seq |
Çok sütunlu anahtardaki konum (1’den başlayan). |
pk_name |
Birincil anahtar kısıtlama adı. |
Yabancı anahtarlar
Yabancı anahtar ilişkilerini keşfedin:
# 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() parametreleri
İlişkileri keşfetmek için birincil anahtar veya yabancı anahtar tabloları belirtin:
| Parametre | Açıklama |
|---|---|
table |
Birincil anahtar tablo adı. |
catalog |
Birincil anahtar kataloğu. |
schema |
Birincil anahtar şeması. |
foreignTable |
Yabancı anahtar tablosunun adı. |
foreignCatalog |
Yabancı anahtar kataloğu. |
foreignSchema |
Yabancı anahtar şeması. |
foreignKeys() sonuç sütunları
Yöntem, foreignKeys() ilişkileri tanımlayan aşağıdaki sütunları döndürür:
| Column | Açıklama |
|---|---|
pktable_cat, pktable_schem, pktable_name |
Referanslı (birincil) tablo. |
pkcolumn_name |
Başvurulan sütun. |
fktable_cat, fktable_schem, fktable_name |
Referans (yabancı) tablo. |
fkcolumn_name |
Başvuru sütunu. |
key_seq |
Çok sütunlu anahtar içindeki konum. |
update_rule |
Eylem UPDATE. |
delete_rule |
Eylem DELETE. |
fk_name |
Yabancı anahtar kısıtının adı. |
pk_name |
Birincil anahtar kısıtlama adı. |
Endeksler ve istatistikler
Bir tablo için indeks bilgisini alın:
# 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}")
istatistik() parametreleri
Indeks keşfini şu filtrelerle yapılandırın:
| Parametre | Varsayılan | Açıklama |
|---|---|---|
table |
(required) | Tablo adı. |
catalog |
Hiçbiri | Katalog (veritabanı) adı. |
schema |
Hiçbiri | Şema adı. |
unique |
Yanlış | Sadece benzersiz indeksler döndürün. |
quick |
True | Pahalı kardinalite/sayfa geri alımını atlayın. |
istatistik() sonuç sütunları
statistics() yöntemi, dizin ve istatistik bilgilerini döndürür:
| Column | Açıklama |
|---|---|
table_cat, table_schem, table_name |
Konum tanımlayıcıları. |
non_unique |
0 benzersiz için, 1 benzersiz olmayan için. |
index_name |
Dizin adı. |
type |
Dizin türü. |
ordinal_position |
Indekste sütun konumu. |
column_name |
Sütun adı. |
asc_or_desc |
A yükselmek için, D inmek için. |
cardinality |
Satır sayısı tahmini. |
pages |
Sayfa sayısı. |
Satır tanımlayıcı sütunları
Bir satırı benzersiz şekilde tanımlayan sütunları bulun:
for row in cursor.rowIdColumns(table="Product", schema="Production"):
print(f"Row ID column: {row.column_name} ({row.type_name})")
Bu yöntem, bir satırı benzersiz şekilde tanımlamak için en iyi sütun setini döndürür; bu satır, birincil anahtar veya benzersiz bir indeks olabilir.
Satır versiyon sütunları
Herhangi bir satır değeri değiştiğinde otomatik güncellenen sütunları bulun. İyimser eşzamanlılık denetimi için satır sürümü sütunlarını kullanın; burada bir satırın sürümünü okur, değişiklikler yapar ve ardından yazmadan önce geçerli satır sürümünün aynı olduğunu doğrularsınız:
for row in cursor.rowVerColumns(table="Product", schema="Production"):
print(f"Version column: {row.column_name}")
Sonuç genellikle iyimser eşzamanlılık için kullanılan sütunları içerir rowversion/timestamp .
Veri türü bilgileri
Desteklenen SQL veri türleri hakkında bilgi edinin:
# 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() parametreleri
Desteklenen SQL tiplerini filtrelemek için isteğe bağlı parametreler:
| Parametre | Açıklama |
|---|---|
sqlType |
SQL tür sabiti (tüm türler için atlanır). |
Güvenlik konuları
Caution
Bu yöntemler veritabanı şeması meta verilerini ortaya çıkarır. Yöntemlerin kendisi yürütülmesi güvenli olsa da, geri dönen bilgiler veritabanınızın yapısını (tablo adları, sütun adları, ilişkiler, veri türleri) ortaya koyar.
- Ham meta verileri güvenilmeyenler için açığa çıkarmayın.
- Çok kiracılı uygulamalarda sonuçları temizleyin veya filtreleyin.
- Dışa dönük uygulamalarda erişimi kısıtlayın.
Örnek: Şema raporu oluşturma
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")