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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM