iT邦幫忙

2022 iThome 鐵人賽

DAY 12
0
自我挑戰組

商業數據分析應用系列 第 12

[Day12] 將資料存入MariaDB(MySQL)

  • 分享至 

  • xImage
  •  

有趣的文章可以看一下MySQL和MariaDB的愛恨糾葛(?)

Today's Goal

簡單梳理操作方式
成功存入MariaDB/MySQL
用SQL語法篩選不重複資料/降冪排序/Order by...(把前幾天問題用SQL語法試著解解看)
DAY10時間跑出的結果(if any)

今天使用的是免費的開源軟體HeidiSQL,它可以支援連線、存取MariaDB, MySQL, Microsoft SQL, PostgreSQL 和 SQLite。如果有想要下載者可以點這邊

由於HeidiSQL是我初學程式的時候一步一步跟著台上課程助教操作的,有點想不起來需要先設定哪些項目,這次也就先不逐一討論或分開解釋(有查些資料,名詞有點超出我目前的理解範圍哈哈)。
但大概閱讀過官方文件後,看起來需要先設定好連線條件(包含用戶、通訊埠(Port)號碼、密碼等,剛下載以上資料庫是沒有密碼的故要先自訂),在Port的部分,官方文件中有說明預設是3306
https://ithelp.ithome.com.tw/upload/images/20220914/20143863pPKiQbxzr5.png
介面大概長這樣,工作階段管理員(Session Manager)可以看到你目前設定的連線。

https://ithelp.ithome.com.tw/upload/images/20220914/20143863ifsWPJo9vf.png
輸入密碼後點就去會長這樣,還看到之前設定的資料庫(在左邊的那個testdb),如果要新增資料庫的話可以直接在MYSQL標題那邊按右鍵,就可以了!
https://ithelp.ithome.com.tw/upload/images/20220914/20143863b9XtTfi5lH.png
類似像這樣,我新創建了一個名稱是【bike_clean_data】的資料庫


從Python存入MySQL

現在回到Python來把資料存進去!一樣是存取去除含有'###..'列的資料。

先進行事前測試,看是否順利將範例順利連線。匯入pymysql套件後,進行連線、建立cursor物件、執行
(note: A cursor is an object which helps to execute the query and fetch the records from the database. --Linux Hint)

import pymysql
# 連線資料庫
db1 = pymysql.connect(host = "127.0.0.1",
                      user = "root",
                      passwd = "12345678",
                      database = "testdb",
                      port = 3306)

cursor = db1.cursor()
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
print ("使用MySQLdb連線的資料庫版本為 : %s " % data)
#確認資料表是否存在
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE_A")
#創建資料表
sql1 = """CREATE TABLE EMPLOYEE_A (
          FIRST_NAME  CHAR(20) NOT NULL,
          LAST_NAME  CHAR(20),
          AGE INT,  
          SEX CHAR(1),
          INCOME FLOAT )"""

cursor.execute(sql1)
db1.close()

https://ithelp.ithome.com.tw/upload/images/20220914/20143863WcE7IK5VGq.png
close()後重打開就看到被創建了/images/emoticon/emoticon42.gif

如法炮製修一下格式,把這次的資料存進去!結果出現錯誤訊息

df1.to_sql('bike_clean_data',db1,if_exists='replace',index=True)
db1.close()

##
DatabaseError: Execution failed on sql: SELECT name FROM sqlite_master WHERE type='table' AND name=?;
not all arguments converted during string formatting
unable to rollback

查了一些網路資源,發現需要搭配sqlalchemy引擎(用來初始化連線),就添加了一些程式進去,似乎原本下載的Anaconda中就有包含這個套件,可以執行pip list來檢查一下。添加幾行後就成功了:

from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:12345678@localhost:3306/bike_clean_data')
df1.to_sql('clean_data',engine,if_exists='replace',index=True)
db1.close()

https://ithelp.ithome.com.tw/upload/images/20220914/20143863m6L5lEWT82.png


SQL語法練習項目(Day13)

明天會用一些基本的SQL語法來練習一下前面在Python中分析過的內容

  1. 篩掉含有'ride_length'欄位含有'###...'以及小於'00:01:00'的資料
  2. 計算總共的不重複筆數
  3. 以長租/中租/短租來計算數量

TOMORROW's Goal

SQL語法練習
統整目前資訊
還有何未解或洞見?
決定好要用的視覺化圖表

明天見^^!


上一篇
[Day11] 將資料存入SQLite中
下一篇
[Day13] SQL語法練習
系列文
商業數據分析應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言