第一步:連接MySQL,以便執行SQL語句
import MySQLdb as msd
import pandas as pd
conn = msd.connect(host='localhost', # 不能使用 hostname
port=3306,
user='root', # 不能使用 username
password='寫user對應的密碼', # 可以縮寫爲passwd
db='database_name', # 可以使用database
charset='utf8'
)
cur = conn.cursor()
第二步:輸入SQL語句 -> 執行SQL -> 結束
cur.execute("CREATE DATABASE test;")
cur.execute("CREATE TABLE haha(row_1 varchar(20);")
data = cur.execute("SELECT * FROM haha;")
print(data) # print返回的是“行數”。
# 如果想把SQL結果導入pandas DataFrame,進行如下操作
# SQL = "SELECT * FROM haha;"
# df = pd.read_sql(sql=SQL, con=conn)
# print(df)
cur.close()
conn.close()
附註: 涉及的函數
- 函數
pandas.read_sql()
(官方文檔鏈接)
pandas.read_sql(
"""常用參數"""
sql, # 輸入SQL
con, # 搭建好的sql 鏈接,如上邊案例中的conn=(<blabla>),具體參數見下邊的函數
chunksize # int類型,默認值是None。指定一次取出來的數據量,避免數據過大導致內不足而不能一次性取出數據
"""不常用參數"""
columns, # list類型,默認值是None。刪選出我們需要的columns數據。
params, # 可以是list/tuple/dict,默認值是None。根據自己的SQL官方文檔,傳入的參數
index_col, # 可以是string/list,默認值是None。被用來當做index/multiindex。
coerce_float, # 把SQL裏邊的以非數值型保存的數字decimal轉化爲float。
parse_dates, # 可以是list/dict,默認值None。對象是column,詳見官方文檔。
)
注:SQL中float和decimal的區別(參考鏈接)
· float和decimal,分別是非標準數據類型和標準數據類型。
· 區別是,float等非標準類型、在DB中保存的是近似值,二decimal則是以字符串的形式保存數值。
- 函數
MySQL.connect()
(文檔鏈接)
MySQL.connect(
"""常用參數"""
host, # 指明要連接的host
user, # 指明登錄的用戶名
passwd, # 指明登錄用戶的密碼
db, # 指明要連接的database
port, # 指明登錄的port
charset, # 指定字符編碼,比如gbk/utf8/unicode等等
connect_timeout, # 指明超過X秒之後,放棄鏈接db
"""不常用參數"""
unix_socket,
conv,
compress,
named_pipe
init_command,
read_default_file,
read_default_group,
cursorclass,
use_unicode,
sql_mode,
ssl
)