a
    bg2
                     @   sH   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 de	Z
dS )    )AnyDictIteratorListOptional)Document)
BaseLoaderc                	   @   sX   e Zd ZdZd	eeeee  eee  eeeef  ddddZ	e
e dddZdS )

TiDBLoaderzLoad documents from TiDB.N)connection_stringquerypage_content_columnsmetadata_columnsengine_argsreturnc                 C   s.   || _ || _|| _|dur|ng | _|| _dS )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    r   w/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/document_loaders/tidb.py__init__   s
    zTiDBLoader.__init__)r   c           
      #   s   ddl m} ddlm} ddlm} |jfi jp6i }| }|	|j
}t|  |D ]X} fddt|D dfdd	 D }fd
djD }	t||	dV  qfW d   n1 s0    Y  dS )z*Lazy load TiDB data into document objects.r   )create_engine)Engine)textc                    s   i | ]\}} | |qS r   r   ).0indexvalue)column_namesr   r   
<dictcomp>9   s   z(TiDBLoader.lazy_load.<locals>.<dictcomp>
c                 3   s4   | ],\}} j d u s| j v r| d| V  qd S )Nz: )r   )r   kv)r   r   r   	<genexpr><   s   

z'TiDBLoader.lazy_load.<locals>.<genexpr>c                    s   i | ]}| | qS r   r   )r   col)row_datar   r   r   B       )page_contentmetadataN)Z
sqlalchemyr   Zsqlalchemy.enginer   Zsqlalchemy.sqlr   r
   r   connectexecuter   listkeys	enumeratejoinitemsr   r   )
r   r   r   r   Zengineconnresultrowr#   r$   r   )r   r!   r   r   	lazy_load%   s(    

zTiDBLoader.lazy_load)NNN)__name__
__module____qualname____doc__strr   r   r   r   r   r   r   r/   r   r   r   r   r	      s      

r	   N)typingr   r   r   r   r   Zlangchain_core.documentsr   Z)langchain_community.document_loaders.baser   r	   r   r   r   r   <module>   s   