Source code for langchain.chains.sql_database.query
from typing import List, Optional, TypedDict, Union
from langchain_core.language_models import BaseLanguageModel
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import BasePromptTemplate
from langchain_core.runnables import Runnable, RunnableParallel
from langchain.chains.sql_database.prompt import PROMPT, SQL_PROMPTS
from langchain.utilities.sql_database import SQLDatabase
def _strip(text: str) -> str:
    return text.strip()
[docs]class SQLInput(TypedDict):
    """Input for a SQL Chain."""
    question: str
[docs]class SQLInputWithTables(TypedDict):
    """Input for a SQL Chain."""
    question: str
    table_names_to_use: List[str]
[docs]def create_sql_query_chain(
    llm: BaseLanguageModel,
    db: SQLDatabase,
    prompt: Optional[BasePromptTemplate] = None,
    k: int = 5,
) -> Runnable[Union[SQLInput, SQLInputWithTables], str]:
    """Create a chain that generates SQL queries.
    *Security Note*: This chain generates SQL queries for the given database.
        The SQLDatabase class provides a get_table_info method that can be used
        to get column information as well as sample data from the table.
        To mitigate risk of leaking sensitive data, limit permissions
        to read and scope to the tables that are needed.
        Optionally, use the SQLInputWithTables input type to specify which tables
        are allowed to be accessed.
        Control access to who can submit requests to this chain.
        See https://python.langchain.com/docs/security for more information.
    Args:
        llm: The language model to use
        db: The SQLDatabase to generate the query for