Files
ai-g3sb-backman2.0/schema/__pycache__/manager.cpython-312.pyc
T

150 lines
15 KiB
Plaintext
Raw Normal View History

2026-04-10 16:52:07 +08:00
Ë
!hØiÕ(ãó —dZddlZddlZddlmZddlmZmZmZm Z ddl
Z
ddl m Z m
Z
ddlmZmZmZe
j$e«ZGd„d «Zy)
uD
Schema管�器 - 管�数�库Schema的加载�索引和检索
éN)ÚPath)ÚListÚDictÚOptionalÚTupleé)ÚDatabaseSchemaÚTable)Ú SchemaLoaderÚload_schema_from_jsonÚload_schema_from_g3sbc
ó —eZdZdZdefd„Ze d'dedeeddfd„«Z ed ed
eddfd „«Z
ed e ddfd
„«Z dedee
fd„Zdeefd„Zdee
fd„Zd(dededee
fd„Z d)deedededefd„Zdeedefd„Zde eeeffd„Z d*dedededee fd„Zdedeefd „Zd+ded!ed"efd#„Zde fd$„Zdefd%„Zdefd&„Zy),Ú
SchemaManageru¢
Schema管�器
功能:
1. 加载和解�Schema文件
2. 管�表关系
3. �供表检索接�
4. 生�紧凑的Schema�述
ÚschemacóŒ—||_|jD�cic]}|j|“Œc}|_d|_i|_ycc}w)ub
�始化Schema管�器
Args:
schema: DatabaseSchema对象
N)rÚtablesÚnameÚ _table_dictÚ_embedding_indexÚ_cache)ÚselfrÚtbls úKC:\Users\24019\Desktop\backman-camel\text2sql_agent_camel\schema\manager.pyÚ__init__zSchemaManager.__init__sC€ðˆŒ Ø5;·]²]ÓC±]¨c˜CŸH™H c™M°]ÑCˆÔØ $ˆÔ؈� ùòDs–ANÚ json_pathÚg3sb_meta_pathÚreturncó,—t||¬«}||«S)uî
从JSON文件加载Schema
Args:
json_path: JSON文件路径
g3sb_meta_path: �选,G3SB table_meta.json(与 table_structure �对)
Returns:
SchemaManager实例
)r)r )Úclsrrrs rÚload_from_jsonzSchemaManager.load_from_json(s€ô' yÀÔPˆÙ�6‹{ÐóÚ meta_pathÚstructure_pathcó*—t||«}||«S)uÐ
从G3SB格�加载Schema
Args:
meta_path: table_meta.json路径
structure_path: table_structure.json路径
Returns:
SchemaManager实例
)r
)rr"r#rs rÚload_from_g3sbzSchemaManager.load_from_g3sb9s€ô' y°.ÓAˆÙ�6‹{Ðr!Údatacó†—t«}t|t«r|j|«nd}|s t d«‚||«S)u¢
从字典创建SchemaManager
Args:
data: 包�database和tables的字典
Returns:
SchemaManager实例
NzInvalid schema data)r Ú
isinstanceÚdictÚ _parse_tableÚ
ValueError)rr&Úloaderrs rÚ from_dictzSchemaManager.from_dictHs?€ô“ˆÜ.8¸¼tÔ.D�×$Ñ$ TÔ*È$ˆÙÜÐ2Ó3Ð 3Ù�6‹{Ðr!Ú
table_namecó8—|jj|«S)u获å�–指定表)rÚget)rr.s rÚ get_tablezSchemaManager.get_table[s€à×Ñ×#Ñ# JÓ/Ð/r!cóH—t|jj««S)u获å�–所有表å��)ÚlistrÚkeys©rs rÚ list_tableszSchemaManager.list_tables_s€ä�D×$Ñ$×)Ñ)Ó+Ó,Ð,r!cóH—t|jj««S)u获å�–所有Table对象)r3rÚvaluesr5s rÚ
get_tableszSchemaManager.get_tablescs€ä�D×$Ñ$×+Ñ+Ó-Ó.Ð.r!ÚdepthcóÔ‡‡‡‡‡—t«Št«Šdtdtfˆˆˆˆˆfd„ Љ|d«‰D�cgc] }|‰jvsŒ‰j|‘Œ"c}Scc}w)uã
获�关�表(通过外键关系)
Args:
table_name: 起始表�
depth: 递归深度(1=直接关�,2=间接关�...)
Returns:
相关表列表
ÚtnameÚ
current_depthcóÞ•—|‰jvs|‰kDry|‰ vry‰ j|«‰j|}|jD]3}‰j|j«‰|j|dz«Œ5‰jj «D]T}|jD]C}|j|k(sŒ‰j|j
«‰|j
|dz«ŒEŒVy)Nr)rÚaddÚ foreign_keysÚ ref_tabler8r)
r<r=ÚtableÚfkÚ other_tableÚ _traverser:ÚresultrÚvisiteds
€€€€€rrEz3SchemaManager.get_related_tables.<locals>._traverseusÓø€Ø˜D×,Ñ,Ñ,°
ÀÒ0EØØ˜ÑØØ �K‰K˜Ô à×$Ñ$ UÑ+ˆEØ×(Ô(�Ø—
‘
˜2Ÿ<™<Ô(Ù˜"Ÿ,™,¨
¸Ñ(9Õ:ð)ð
$×/Ñ/×6Ñ6Ö8� Ø%×2Ô2�BØ—|‘| uÓ,ØŸ
™
 ;×#3Ñ#3Ô4Ù! +×"2Ñ"2°MÀAÑ4EÕFñ3ñ 9r!r)ÚsetÚstrÚintr)rr.r:ÚtrErFrGs` ` @@@rÚget_related_tablesz SchemaManager.get_related_tablesgskü€ô“ˆÜ“%ˆð GœSð G´÷ Gñ Gñ& �*˜aÔ Ù-3ÓM©V¨°q¸D×<LÑ<LÒ7L�× Ñ  Ó#¨VÑMÐMùÒMs ½A%ÁA%Ú table_namesÚinclude_columnsÚmax_columns_per_tablec ó�—|€|j«}nb|D�cgc]}||jvsŒ|‘Œ}}|rtjd|«|j«D�cgc]}|j|vsŒ|‘Œ}}g}|j d|j j›�«|j dt|«›�«|j d«|j d«|D�]È} |j d| j›�«| jr|j d| j›�«|râ| jrÖ|j d «| jd|D]p}
|
jrd
nd} |
jsd nd} |
jrd |
j›�nd}
|j d
|
j›d|
j›| ›| ›|
›�«Œrt| j«|kDr+|j dt| j«|z
›d�«| jr||j d«| jddD]Y}|j d
dj|j«›d|j›ddj|j «›d�«Œ[|j d«�ŒËdj|«Scc}wcc}w)uH
生�紧凑的Schema�述字符串(用于LLM输入)
Args:
table_names: 指定包�的表(None表示所有表)
include_columns: 是�包�字段详情
max_columns_per_table: �表最多显示字段数
Returns:
Schema�述字符串
NuL以下表å��ä¸�在已加载Schema中,已从本次Schema片段中çœ�ç•¥: %su æ•°æ�®åº“: u涉å�Šè¡¨æ•°: z<============================================================Úu ã€�表】u
�述: u 字段:z [PK]z NOT NULLz -- z z: u ... 还有 u
个字段u 外键:éz, u → Ú(Ú)Ú
)r9rÚloggerÚwarningrÚappendrÚlenÚcommentÚcolumnsÚis_primary_keyÚnullableÚ data_typer@ÚjoinrAÚ ref_columns)rrMrNrOrÚnÚmissingrKÚlinesrBÚcolÚ pk_markerÚ null_markerrZrCs rÚto_compact_stringzSchemaManager.to_compact_string�ss€ð" Ð Ø—_‘_Ó&‰Fá"-ÓK¡+˜Q°¸$×:JÑ:JÒ1J’q +ˆGÐKÙÜ—‘ØbØôð"&§¡Ô!2ÓLÑ!2˜A°a·f±fÀ Ò6K’aÐ!2ˆFÐLàˆØ
� ‰ �{ 4§;¡;×#3Ñ#3Ð"4Ð5Ô6Ø
� ‰ �~¤c¨&£k ]Ð3Ô4Ø
� ‰ �XÔØ
� ‰ �RÔäˆEØ �L‰L˜9 U§Z¡Z LÐ1Ô 2Ø�}Š}Ø— ‘ ˜z¨%¯-©-¨Ð9Ô:á 5§=¢=Ø— ‘ ˜yÔ*Ø Ÿ=™=Ð)?Ð*?Ó@�CØ+.×+=Ò+=¡À2�IØ58·\²\¡+Àr�KØ69·k²k  S§[¡[ MÑ2Àr�GØ—L‘L 4¨¯© z°°C·M±M°?À9À+ÈkÈ]Ð[bÐZcÐ!dÕeð Aô �u—}‘}Ó%Ð(=Ò=Ø—L‘L ?´3°u·}±}Ó3EÐH]Ñ3]Ð2^Ð^hÐ!iÔjð×!Ò!Ø— ‘ ˜[Ô)Ø×,Ñ,¨R¨aÓ0�BØ—L‘LؘtŸy™y¨¯©Ó4Ð5°U¸2¿<¹<¸.ÈÈ$Ï)É)ÐTV×TbÑTbÓJcÐIdÐdeÐfõð1ð
�L‰L˜Ö ð1ð4�y‰y˜ÓÐùòQLùò Ms˜J>¬J>ÁKÁ0Kcó¬—|j«D�cgc]}|j|vsŒ|‘Œ}}t|jj›d�|¬«Scc}w)u³
根�表�过滤,生��集Schema
Args:
table_names: ��留的表�列表
Returns:
新的DatabaseSchema对象
Ú _filtered)rr)r9rr r)rrMrKÚfiltered_tabless rÚto_filtered_schemaz SchemaManager.to_filtered_schemaËsW€ð'+§o¡oÔ&7ÓQÑ&7 ¸1¿6¹6À[Ò;Pš1Ð&7ˆÐQÜØ—K‘K×$Ñ$Ð% YÐ/Ø"ô
ð
ùòRs
“A§AÚtable_embeddingscót—|j«D]%}|j|vsŒ||j|_Œ'y)u…
为表设置预计算的embedding��
Args:
table_embeddings: {table_name: embedding_vector}
N)r9rÚ embedding)rrlrBs rÚset_embeddingszSchemaManager.set_embeddingsÝs2€ð—_‘_Ö&ˆEØ�z‰zÐ-Ò-Ø"2°5·:±:Ñ">�•ñ'r!Ú max_columnsÚmax_col_comment_charsÚmax_total_charsc ó”—g}|j«D�]±}d|j›�g}|jr|jd|j›�«g}|jd|}|D]–} | j›d| j
›�}
| j r|
dz
}
| jrK| jj«jdd«} t| «|kDr | d|dz
dz} |
d | ›�z
}
|j|
«Œ˜|r#|jd
d j|«z«t|j«|kDrCt|j«|z
} |jd | ›d
t|j«›d�«dj|«}
t|
«|kDr |
d|dz
dz}
|j|j|
dœ«�Œ´|S)uŒ