4

I want to hide this warning UserWarning: pandas only support SQLAlchemy connectable(engine/connection) ordatabase string URI or sqlite3 DBAPI2 connectionother DBAPI2 objects are not tested, please consider using SQLAlchemy and I've tried

import warnings
warnings.simplefilter(action='ignore', category=UserWarning)

import pandas

but the warning still shows.

My python script read data from databases. I'm using pandas.read_sql for SQL queries and psycopg2 for db connections.

Also I'd like to know which line triggers the warning.

Osca
  • 1,588
  • 2
  • 20
  • 41

4 Answers4

5

I tried this and it doesn't work.

import warnings
warnings.filterwarnings('ignore')

Therefore, I used SQLAlchemy (as the warning message wants me to do so) to wrap the psycopg2 connection.

I followed the instruction here: SQLAlchemy for psycopg2 documentation

A simple example:

import psycopg2
import sqlalchemy
import pandas as pd

conn = sqlalchemy.create_engine(f"postgresql+psycopg2://{user}:{pw}@{host}:{port}/{db}")

query = "select count(*) from my_table"

pd.read_sql(query, conn)

The warning doesn't get triggered anymore.

Osca
  • 1,588
  • 2
  • 20
  • 41
5

Using the following worked well for me:

import warnings

warnings.filterwarnings('ignore').

I am using pandas with pyodbc and was previously getting the same warning.

BDL
  • 21,052
  • 22
  • 49
  • 55
1

The warnings that you're filtering right now are warnings of type FutureWarning. The warning that you're getting is of type UserWarning, so you should change the warning category to UserWarning. I hope this answers your question regarding why pandas is giving that warning.

Timothy
  • 143
  • 3
  • 12
  • hi `UserWarning` doesn't work as well. I'll edit my question – Osca Sep 06 '22 at 02:06
  • Hm.. that's weird. I've tried an simple example also using psycopg2, and no warnings were printed when I've filtered the warning. Are you perhaps connecting to your database in another script? – Timothy Sep 06 '22 at 02:23
0

I was having the same error when using psycopg2 to connect to a PostgreSQL database. I was able to successfully hide this warning with the follwing lines:

import warnings
warnings.simplefilter(action='ignore', category=UserWarning)

I think they key here is that UserWarning needs to be a class and not a string like you have in your example.

Hopefully this works for you.

Waleed Alfaris
  • 136
  • 1
  • 9