1. 程式人生 > >pandas read_sql與read_sql_table、read_sql_query 的區別

pandas read_sql與read_sql_table、read_sql_query 的區別

ins div size 定義 otto 結果 ram 操作 插入

一:創建鏈接數據庫引擎

from sqlalchemy import create_engine  
      
db_info = {user:user,  
    password:pwd,  
    host:localhost,  
    database:xx_db  # 這裏我們事先指定了數據庫,後續操作只需要表即可
}  
      
engine = create_engine(mysql+pymysql://%(user)s:%(password)s@%(host)s/%(database)s?charset=utf8 % db_info,encoding=
utf-8) #這裏直接使用pymysql連接,echo=True,會顯示在加載數據庫所執行的SQL語句。

二:讀取數據庫數據,存儲為DataFrame格式

部分來自於博客:http://blog.csdn.net/u011301133/article/details/52488690

1:讀取自定義數據(通過SQL語句)

pandas.read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None,chunksize=None)

例如:data = pd.read_sql_query(‘select * from t_line ‘,con = engine),會返回一個數據庫t_line表的DataFrame格式。如有有時間列可以parse_dates = [time_column]用於解析時間,並把此列作為索引index_col = [time_column]

read_sql_query()中可以接受SQL語句,包括增刪改查。但是DELETE語句不會返回值(但是會在數據庫中執行),UPDATE,SELECT,等會返回結果.

例如:data = pd.read_sql_query(‘delete from test_cjk where f_intime = 1309‘,con = engine),這條語句會執行,刪除 test_cjk表中f_intime=1309的值,但不會返回data。

其他例子:

‘‘‘插入操作‘‘‘ pd.read_sql_query("insert into cjk_test h values %(data)s",params={‘data‘:v_split[11]},con=engine)

‘‘‘更新操作‘‘‘ pd.read_sql_query("update cjk_test set a=‘粵11111‘ WHERE a=‘粵B30738‘",con =engine)

‘‘‘刪除操作‘‘‘pd.read_sql_query("delete from cjk_test where c=‘1‘",con=engine)

刪除插入更新操作沒有返回值,程序會拋出SourceCodeCloseError,並終止程序。如果想繼續運行,可以try捕捉此異常。

2:讀取整張表於DataFrame格式(通過表名)

pd.read_sql_table(table_name, con, schema=None, index_col=None, coerce_float=True, parse_dates=None, columns=None, chunksize=None)

例如:data = pd.read_sql_table(table_name = ‘t_line‘,con = engine,parse_dates = ‘time‘,index_col = ‘time‘,columns = [‘a‘,‘b‘,‘c‘])

3:讀數據庫(通過SQL語句或者表名)

通過sql語句的見我另一篇文章:http://www.cnblogs.com/cymwill/articles/7576600.html

pd.read_sql(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)

技術分享圖片

下面兩個的作用又是相同的:

技術分享圖片

這個是官網的源代碼裏面的片段:

技術分享圖片

我們再將query與table相反的試一下:

技術分享圖片

報錯,故兩者不能反過來。

從上面可以看到,其實read_sql是綜合了read_sql_table和read_sql_query的,所以一般用read_sql就好了,省得再去區別那些東西。

三:數據寫入於數據庫

見我另一篇文章:http://www.cnblogs.com/cymwill/p/8288667.html

pandas read_sql與read_sql_table、read_sql_query 的區別