
    ih2
                     N    d dl mZmZmZmZmZ d dlmZ d dlm	Z	  G d de	      Z
y)    )AnyDictIteratorListOptional)Document)
BaseLoaderc                   r    e Zd ZdZ	 	 	 ddededeee      deee      deeeef      ddfd	Z	de
e   fd
Zy)
TiDBLoaderzLoad documents from TiDB.Nconnection_stringquerypage_content_columnsmetadata_columnsengine_argsreturnc                 R    || _         || _        || _        ||ng | _        || _        y)aT  Initialize TiDB document loader.

        Args:
            connection_string (str): The connection string for the TiDB database,
                format: "mysql+pymysql://root@127.0.0.1:4000/test".
            query: The query to run in TiDB.
            page_content_columns: Optional. Columns written to Document `page_content`,
                default(None) to all columns.
            metadata_columns: Optional. Columns written to Document `metadata`,
                default(None) to no columns.
            engine_args: Optional. Additional arguments to pass to sqlalchemy engine.
        N)r   r   r   r   r   )selfr   r   r   r   r   s         g/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain_community/document_loaders/tidb.py__init__zTiDBLoader.__init__   s4    ( "3
$8!4D4P 0VX&    c              #   B   K   ddl m} ddlm} ddlm}  | j                  fi  j                  xs i }|j                         5 }|j                   | j                              }t        |j                               }|D ]w  }t        |      D 	
ci c]  \  }	}
||	   |
 }}	}
dj                   fd|j                         D              } j                   D ci c]  }|||   
 }}t#        ||       y 	 ddd       yc c}
}	w c c}w # 1 sw Y   yxY ww)	z*Lazy load TiDB data into document objects.r   )create_engine)Engine)text
c              3   f   K   | ](  \  }}j                   |j                   v r	| d|  * y w)Nz: )r   ).0kvr   s      r   	<genexpr>z'TiDBLoader.lazy_load.<locals>.<genexpr><   sA      )1008D555 cA3K)s   .1)page_contentmetadataN)
sqlalchemyr   sqlalchemy.enginer   sqlalchemy.sqlr   r   r   connectexecuter   listkeys	enumeratejoinitemsr   r   )r   r   r   r   engineconnresultcolumn_namesrowindexvaluerow_datar!   colr"   s   `              r   	lazy_loadzTiDBLoader.lazy_load%   s0     	-,' '""
'+'7'7'=2

 ^^ 	M\\$tzz"23F  .L M DMS>3?5%L'.   $yy ) ( 0)   ;?:O:OP3C#.PPL8LLM	M 	M Q!	M 	Ms=   ADADD
%9DD+D?	DDDD)NNN)__name__
__module____qualname____doc__strr   r   r   r   r   r   r   r6    r   r   r   r      s    # 590404'' ' 'tCy1	'
 #49-' d38n-' 
'4M8H- Mr   r   N)typingr   r   r   r   r   langchain_core.documentsr   )langchain_community.document_loaders.baser	   r   r<   r   r   <module>r@      s    6 6 - @;M ;Mr   