Skip to main content

Generate SQL queries from natural language

Project description

GitHub PyPI Colab Documentation
GitHub PyPI Colab Documentation

Vanna.AI

Vanna is a Python-based AI SQL co-pilot. Our initial users are data-savvy data analysts, data scientists, engineers, and similar people that use Vanna to automate writing complex SQL.

Vanna can:

Natural Language to SQL

sql = vn.generate_sql(question='Who are the top 10 customers?')

Output:

SELECT customer_name,
       total_sales
FROM   (SELECT c.c_name as customer_name,
               sum(l.l_extendedprice * (1 - l.l_discount)) as total_sales,
               row_number() OVER (ORDER BY sum(l.l_extendedprice * (1 - l.l_discount)) desc) as rank
        FROM   snowflake_sample_data.tpch_sf1.lineitem l join snowflake_sample_data.tpch_sf1.orders o
                ON l.l_orderkey = o.o_orderkey join snowflake_sample_data.tpch_sf1.customer c
                ON o.o_custkey = c.c_custkey
        GROUP BY customer_name)
WHERE  rank <= 10;

Run SQL

This function is provided as a convenience. You can choose to run your SQL however you normally do and use the rest of the downstream functions.

df = vn.get_results(cs, database, sql)

Output:

customer_name total_sales
Customer#000000001 68127.72
Customer#000000002 65898.69
...

Generate Plotly Code

plotly_code = vn.generate_plotly_code(question=my_question, sql=sql, df=df)

Output:

fig = go.Figure(go.Bar(
    x=df['CUSTOMER_NAME'],
    y=df['TOTAL_SALES'],
    marker={'color': df['TOTAL_SALES'], 'colorscale': 'Viridis'},
    text=df['TOTAL_SALES'],
    textposition='auto',
))

fig.update_layout(
    title="Top 10 Customers by Sales",
    xaxis_title="Customer",
    yaxis_title="Total Sales",
    xaxis_tickangle=-45,
    yaxis_tickprefix="$",
)

Run Plotly Code

fig = vn.get_plotly_figure(plotly_code=plotly_code, df=df)
fig.show()

Output:

Top 10 Customers by Sales

Improve Your Training Data

vn.store_sql(
    question=my_question,
    sql=sql,
)

How Vanna Works

flowchart LR
    DB[(Known Correct Question-SQL)]
    Try[Try to Use DDL/Documentation]
    SQL(SQL)
    Check{Is the SQL correct?}
    Generate[fa:fa-circle-question Use Examples to Generate]
    DB --> Find
    Question[fa:fa-circle-question Question] --> Find{fa:fa-magnifying-glass Do we have similar questions?}
    Find -- Yes --> Generate
    Find -- No --> Try
    Generate --> SQL
    Try --> SQL
    SQL --> Check
    Check -- Yes --> DB
    Check -- No --> Analyst[fa:fa-glasses Analyst Writes the SQL]
    Analyst -- Adds --> DB

Getting Started

Install Vanna from PyPI and import it:

%pip install vanna
import vanna as vn

Enter your email to set an API Key

This will send a one-time code to your email address. Copy and paste the code into the prompt.

my_email = '' # Enter your email here
vn.login(email=my_email)

Add Training Data

vn.train(
    question="Which products have the highest sales?",
    sql="...",
)

Generate SQL

sql = vn.generate_sql(question="Who are the top 10 customers?")

Documentation

Full Documentation

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vanna-0.0.15.tar.gz (14.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vanna-0.0.15-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

File details

Details for the file vanna-0.0.15.tar.gz.

File metadata

  • Download URL: vanna-0.0.15.tar.gz
  • Upload date:
  • Size: 14.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for vanna-0.0.15.tar.gz
Algorithm Hash digest
SHA256 f88f13a193f2207508d38bc5716d8b5d834068b69338e9da5f2043c02e412648
MD5 8e23267605fed90c770a5700830553b0
BLAKE2b-256 d005c8210f5ebddd6364274086c611fea5656fc92c244edaeec9528b3c6d312d

See more details on using hashes here.

File details

Details for the file vanna-0.0.15-py3-none-any.whl.

File metadata

  • Download URL: vanna-0.0.15-py3-none-any.whl
  • Upload date:
  • Size: 11.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.17

File hashes

Hashes for vanna-0.0.15-py3-none-any.whl
Algorithm Hash digest
SHA256 120499d3cd3e1da76d430d2063df87be156526b3d0112ffe5b3a75f649cd9e09
MD5 6f3c6fee6903b20442628719ab1d5745
BLAKE2b-256 418057b6137aafd4b46f4a6abde0e805b1a84f1c2c225c88ac3d447b9c44045d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page