pandas read_sql與read_sql_table、read_sql_query 的區別
一:創建鏈接數據庫引擎
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 的區別