Pandas数据库查询更新create_engine用法,以及一些警告及弃用处理

警示情况:

UserWarning: pandas only supports SQLAlchemy connectable (engine/connection) or database string URI or sqlite3 DBAPI2 connection. Other DBAPI2 objects are not tested. Please consider using SQLAlchemy.

目前使用的连接方式:

conn = pymysql.connect(
         host='127.0.0.1',
        user='root',
        passwd='xxxx',
        db='house_term',
        port=3306,
        charset='utf8'
     )
data = pd.read_sql("select * from warehouse_housing", conn)

避免警告提示推荐使用SQLAlchemy

需要先安装SQLAlchemy库: pip install sqlalchemy

新连接使用方式:

from sqlalchemy import create_engine, text

    host = '127.0.0.1'
    user = 'root'
    passwd = 'x x x'
    db = 'house_term'
    port = 3306
    engine = create_engine('mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8'
                           % (user, passwd, host, port, db))

    data = pd.read_sql(text("select * from warehouse_housing"), engine.connect())

sql语句需要使用text()包裹使用,如果没有包裹则会报错:

raise exc.ObjectNotExecutableError(statement) from err
sqlalchemy.exc.ObjectNotExecutableError: Not an executable object: 'select * from warehouse_housing'

engine需要使用connect()否则会出现如下报错:

原因:pd.read_sql方法传递“连接”变量而不是“引擎”

    return self.connectable.execution_options().execute(*args, **kwargs)
AttributeError: 'Engine' object has no attribute 'execution_options'

原因:pd.read_sql方法传递“连接”变量而不是“引擎”

详细讲解一下create_engine的使用方法:

engine = create_engine('dialect+driver://username:password@host:port/database')

dialect -- 数据库类型               driver -- 数据库驱动选择

username -- 数据库用户名        password -- 用户密码

host--服务器地址       port--端口        database--数据库

另外附上隐藏警告的使用方法:

import warnings
warnings.filterwarnings('ignore')

你可能感兴趣的:(Python,pandas,数据库,python)