๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Python

[Python] 3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๊ธฐ (ํ•œ๊ตญ์ „๋ ฅ๊ฑฐ๋ž˜์†Œ ์‹œ๊ฐ„๋ณ„ ์ „๋ ฅ์ˆ˜์š”๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, Python-mariaDB ์—ฐ๊ฒฐ, ๋ฐ์ดํ„ฐ ๋žญ๊ธ€๋ง)

by ITyranno 2023. 12. 4.
728x90
๋ฐ˜์‘ํ˜•

 

 

 

 

 

 

 

 

 

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„๋ฅผ ํƒ๊ตฌํ•ฉ์‹œ๋‹ค.

 

 

 

 

 

 

 

 

 

 

1, 2ํŽธ์€ ์ด์ „ ๊ฒŒ์‹œ๊ธ€ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

 

2023.12.01 - [IT/Python] - [Python] 1. ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ํ•˜๊ธฐ (ํ•œ๊ตญ์ „๋ ฅ๊ฑฐ๋ž˜์†Œ ์‹œ๊ฐ„๋ณ„ ์ „๋ ฅ์ˆ˜์š”๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ๋ฐ์ดํ„ฐ ๋žญ๊ธ€๋ง)

 

[Python] 1. ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ํ•˜๊ธฐ (ํ•œ๊ตญ์ „๋ ฅ๊ฑฐ๋ž˜์†Œ ์‹œ๊ฐ„๋ณ„ ์ „๋ ฅ์ˆ˜์š”๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ๋ฐ์ดํ„ฐ ๋žญ๊ธ€๋ง)

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„๋ฅผ ํƒ๊ตฌํ•ฉ์‹œ๋‹ค. [์ˆ˜์ง‘ ์œ„์น˜] https://www.data.go.kr/data/15065266/fileData.do ํ•œ๊ตญ์ „๋ ฅ๊ฑฐ๋ž˜์†Œ_์‹œ๊ฐ„๋ณ„ ์ „๋ ฅ์ˆ˜์š”๋Ÿ‰_20211231 ์‹œ๊ฐ„๋‹จ์œ„ ์ „๊ตญ ๋ฐœ์ „๋‹จ ์ˆ˜์š” ๋ฐ์ดํ„ฐ์ด๋ฉฐ ์ˆ˜์š”์˜ˆ์ธก์šฉ ์ž ์ •์ž๋ฃŒ์ž„์„ ์•Œ

ityranno.tistory.com

 

 

2023.12.02 - [IT/Python] - [Python] 2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๊ธฐ (ํ•œ๊ตญ์ „๋ ฅ๊ฑฐ๋ž˜์†Œ ์‹œ๊ฐ„๋ณ„ ์ „๋ ฅ์ˆ˜์š”๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, Python-mariaDB ์—ฐ๊ฒฐ, ๋ฐ์ดํ„ฐ ๋žญ๊ธ€๋ง)

 

[Python] 2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๊ธฐ (ํ•œ๊ตญ์ „๋ ฅ๊ฑฐ๋ž˜์†Œ ์‹œ๊ฐ„๋ณ„ ์ „๋ ฅ์ˆ˜์š”๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, Pyth

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ธ๊ณ„๋ฅผ ํƒ๊ตฌํ•ฉ์‹œ๋‹ค. 1ํŽธ์€ ์ด์ „ ๊ฒŒ์‹œ๊ธ€ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค. 2023.12.01 - [IT/Python] - [Python] 1. ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ํ•˜๊ธฐ (ํ•œ๊ตญ์ „๋ ฅ๊ฑฐ๋ž˜์†Œ ์‹œ๊ฐ„๋ณ„ ์ „๋ ฅ์ˆ˜์š”๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘, ๋ฐ์ดํ„ฐ ๋žญ๊ธ€๋ง) [Python] 1. ๋ฐ

ityranno.tistory.com

 

 

 

 

 

 

 

 

 

<  DB ํ”„๋กœ๊ทธ๋žจ ์ˆœ์„œ  >

 

 1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ • ์ •๋ณด ์ค€๋น„
 2. DB ์ ‘์†ํ•˜๊ธฐ : ์ปค๋„ฅ์…˜(connect)
 3. ์ปค์„œ ๋ฐ›์•„์˜ค๊ธฐ : currsor()
 4. ๊ตฌ๋ฌธ ์ž‘์„ฑํ•˜๊ธฐ : sql(์กฐํšŒ, ์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ)
 5. ๊ตฌ๋ฌธ ์‹คํ–‰ํ•˜๊ธฐ : execute() -> ๊ฒฐ๊ณผ๊ฐ’์€ ์ฒดํฌ
 6. ์กฐํšŒ์ธ ๊ฒฝ์šฐ ์ปค์„œ์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœํ•˜๊ธฐ
    -> ํ•œ๊ฑด : fetchone()
    -> ์—ฌ๋Ÿฌ๊ฑด : fetchall()
 7. ์กฐํšŒ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ๋˜๋Š” ์›นํŽ˜์ด์ง€์— ์ถœ๋ ฅ
    -> ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ : pd.DataFrame(์—ฌ๋Ÿฌ๊ฑด), pd.DataFrame([ํ•œ๊ฑด])
 8. ์กฐํšŒ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ : ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ ์กฐ๊ฑด์œผ๋กœ ํ™•์ธํ•˜๊ธฐ if "์ฒ˜๋ฆฌ ์„ฑ๊ณต" ~ else "์ฒ˜๋ฆฌ ์‹คํŒจ"
 9. DB์ •๋ณด ๋ฐ˜ํ™˜ํ•˜๊ธฐ
    - ๋ฐ˜ํ™˜ ์ˆœ์„œ : currsor > connect

 

 

 

 

 

<  ์กฐํšŒ ๊ฒฐ๊ณผ๊ฐ€ ์—ฌ๋Ÿฌ๊ฑด์ธ ๊ฒฝ์šฐ  >

 

 

rows = cur.fetchall()
rows

 

 

 

 

 

 

 

ymd_power_df = pd.DataFrame(rows)
# - ์ปฌ๋Ÿผ๋ช… ์—†์ด ๋ฐ›์•„์˜จ ๊ฒฝ์šฐ
# - [(), ()...]
# ymd_power_df = pd.DataFrame(rows, colums=["ymd", "time", "power"])
ymd_power_df

 

 

 

 

 

 

 

 

 

 

< ํ•œ ๊ฑด ์กฐํšŒํ•˜๊ธฐ >

 

 

 

ํ•œ ๊ฑด ์กฐํšŒ๋ฅผ ์œ„ํ•œ sql ๊ตฌ๋ฌธ ์ƒ์„ฑํ•˜๊ธฐ

 

### ํ•œ ๊ฑด ์กฐํšŒ๋ฅผ ์œ„ํ•œ sql ๊ตฌ๋ฌธ ์ƒ์„ฑํ•˜๊ธฐ
sql = """
    Select * From time_power_demand
    Where ymd = '2021-01-01'
     And time = '1์‹œ'
"""

sql

 

 

 

 

 

 

 

 

SQL ๊ตฌ๋ฌธ์„ DB ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ , ๊ฒฐ๊ณผ ๋ฐ›์•„์˜ค๊ธฐ

 

 

 

### SQL ๊ตฌ๋ฌธ์„ DB ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ณ , ๊ฒฐ๊ณผ ๋ฐ›์•„์˜ค๊ธฐ
cur.execute(sql)

 

 

 

 

 

 

 

 

row = cur.fetchone()
row

 

 

 

 

 

 

 

 

 

๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์— ๋‹ด์•„์„œ ๋ณด์—ฌ์ฃผ๊ธฐ

 

 

### ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์— ๋‹ด์•„์„œ ๋ณด์—ฌ์ฃผ๊ธฐ
ymd_power_one = pd.DataFrame([row])
ymd_power_one

 

 

 

 

 

 

 

 

<  ๋ฐ์ดํ„ฐ ์ž…๋ ฅํ•˜๊ธฐ (insert)  >

 

 

 

์ž…๋ ฅ์„ ์œ„ํ•œ ๊ตฌ๋ฌธ ์ƒ์„ฑํ•˜๊ธฐ

 

 

### ์ž…๋ ฅ์„ ์œ„ํ•œ ๊ตฌ๋ฌธ ์ƒ์„ฑํ•˜๊ธฐ
sql = """
    Insert Into time_power_demand(
        ymd, time, power
    ) Values (
        '2020-12-31', '24์‹œ', 1234
    )
"""
sql

 

 

 

 

 

 

 

 

์ €์žฅ ์š”์ฒญ ์‹œ์—๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. 

 

### ์ €์žฅ ์š”์ฒญ ์‹œ์—๋Š” ๊ฒฐ๊ณผ๊ฐ’์ด ์ˆซ์ž๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
rs_cnt = cur.execute(sql)
rs_cnt

 

 

print(f"{rs_cnt}๊ฑด์ด ์ฒ˜๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")

 

 

 

 

 

 

 

 

 

 

์ฒ˜๋ฆฌ๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

 

 

### ์ฒ˜๋ฆฌ๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ
# - 0๋ณด๋‹ค ํฌ๋ฉด "1๊ฑด์ด ์ž…๋ ฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค." ์ถœ๋ ฅ
# - 0์ดํ•˜์ธ ๊ฒฝ์šฐ์—๋Š” "์ž…๋ ฅ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค." ์ถœ๋ ฅ
if rs_cnt > 0 :
    print(f"{rs_cnt}๊ฑด์ด ์ž…๋ ฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
else :
    print("์ž…๋ ฅ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")

 

 

 

 

 

 

 

 

 

 

< ์ˆ˜์ •ํ•˜๊ธฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ >

 

 

 

ymd๊ฐ€ 2020-12-31์ด๊ณ , ์‹œ๊ฐ„์ด 24์‹œ์ธ ํ–‰์„ ์ฐพ์•„์„œ power์˜ ๊ฐ’์„ 5678๋กœ ์ˆ˜์ •ํ•˜๊ธฐ

 

 

### ymd๊ฐ€ 2020-12-31์ด๊ณ , ์‹œ๊ฐ„์ด 24์‹œ์ธ ํ–‰์„ ์ฐพ์•„์„œ
#   power์˜ ๊ฐ’์„ 5678๋กœ ์ˆ˜์ •ํ•˜๊ธฐ
sql = """
    UPDATE time_power_demand
	 SET POWER = 3333
    WHERE ymd = '2020-12-31'
	 AND TIME = '24์‹œ'
"""
sql

 

 

 

 

 

 

 

 

 

 

 

 

 

<  ์‚ญ์ œํ•˜๊ธฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ  >

 

 

ymd๊ฐ€ 2020-12-31์ด๊ณ , ์‹œ๊ฐ„์ด 24์‹œ์ธ ํ–‰์„ ์ฐพ์•„์„œ ์‚ญ์ œํ•˜๊ธฐ

 

 

### ymd๊ฐ€ 2020-12-31์ด๊ณ , ์‹œ๊ฐ„์ด 24์‹œ์ธ ํ–‰์„ ์ฐพ์•„์„œ
#   ์‚ญ์ œ์‹œํ‚ค๊ธฐ
sql = """
  DELETE FROM time_power_demand
  WHERE ymd = '2020-12-31'
	AND TIME = '24์‹œ'
"""

 

 

### DB์— SQL ๊ตฌ๋ฌธ ์š”์ฒญํ•˜๊ณ  ๊ฒฐ๊ณผ ๋ฐ›์•„์˜ค๊ธฐ
rs_cnt = cur.execute(sql)

if rs_cnt > 0 :
    print(f"{rs_cnt}๊ฑด์ด ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
else :
    print("์‚ญ์ œ ์‹คํŒจ ใ… ")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<  ํ•œ ๋ฒˆ๋„ ๊ตฌ๋งคํ•œ ์ ์ด ์—†๋Š” ํšŒ์›์ •๋ณด๋ฅผ ์กฐํšŒ  >

 

 

์กฐํšŒ์ปฌ๋Ÿผ : ํšŒ์›์•„์ด๋””, ํšŒ์›์ด๋ฆ„

 

 

 

 

### ํ•œ ๋ฒˆ๋„ ๊ตฌ๋งคํ•œ ์ ์ด ์—†๋Š” ํšŒ์›์ •๋ณด๋ฅผ ์กฐํšŒํ•ด์ฃผ์„ธ์š”
# - ์กฐํšŒ์ปฌ๋Ÿผ : ํšŒ์›์•„์ด๋””, ํšŒ์›์ด๋ฆ„

sql = """
  SELECT mem_id, mem_name
  FROM member
  WHERE not EXISTS(SELECT cart_member from cart
					WHERE cart_member = mem_id)

"""
sql

 

 

 

 

 

 

rs_cnt = cur.execute(sql)
if rs_cnt > 0 :
    print(f"{rs_cnt}๊ฑด ์กฐํšŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
else :
    print("์กฐํšŒ ์‹คํŒจ....ใ… ใ… ")

 

 

 

 

 

 

 

 

 

์ปค์„œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฐ๊ณผ ์ถ”์ถœํ•˜๊ธฐ

 

 

### ์ปค์„œ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฐ๊ณผ ์ถ”์ถœํ•˜๊ธฐ
rows = cur.fetchall()
rows

 

 

 

 

 

 

 

 

 

 

 

๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋งŒ๋“ค๊ธฐ 

 

 

 

### ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋งŒ๋“ค๊ธฐ
noMember = pd.DataFrame(rows)
noMember

 

 

 

 

 

 

 

 

 

 

1. ํด๋ž˜์Šค ์ƒ์„ฑ
 - ํด๋ž˜์Šค ์ด๋ฆ„ : PowerClass
2. ํด๋ž˜์Šค ๋‚ด์— ํ•จ์ˆ˜๋“ค ์ •์˜
3. ์™ธ๋ถ€์—์„œ ์กฐํšŒ/ํ•œ๊ฑด์ž…๋ ฅ/์ˆ˜์ •/์‚ญ์ œ ์ฒ˜๋ฆฌํ•˜๊ธฐ

 

 

import pandas as pd
import pymysql

class PowerClass:
    def __init__(self, host, port, user, password, db, charset='utf8', autocommit=True, cursorclass=pymysql.cursors.DictCursor):
        self.host = host
        self.port = port
        self.user = user
        self.password = password
        self.db = db
        self.charset = charset
        self.autocommit = autocommit
        self.cursorclass = cursorclass
        self.connection = None

    def connect_db(self):
        try:
            self.connection = pymysql.connect(
                host=self.host,
                port=self.port,
                user=self.user,
                password=self.password,
                db=self.db,
                charset=self.charset,
                autocommit=self.autocommit,
                cursorclass=self.cursorclass
            )
            print("DB ์—ฐ๊ฒฐ ์„ฑ๊ณต")
        except Exception as e:
            print(f"DB ์—ฐ๊ฒฐ ์—๋Ÿฌ: {e}")

    def close_db(self):
        if self.connection:
            self.connection.close()
            print("DB ์—ฐ๊ฒฐ ์ข…๋ฃŒ")

    def select_data(self, sql):
        try:
            with self.connection.cursor() as cursor:
                indata = cursor.execute(sql)
                result = cursor.fetchall()
                df_result = pd.DataFrame(result)
                print(f"{indata} ๊ฑด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์กฐํšŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.")
                print(result)
                print(df_result)
        except Exception as e:
            print(f"๋ฐ์ดํ„ฐ ์กฐํšŒ ์—๋Ÿฌ: {e}")
    
    def insert_data(self, sql):
        try:
            with self.connection.cursor() as cursor:
                indata = cursor.execute(sql)
                if(indata>0): print(f"{indata} ๊ฑด์˜ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์„ฑ๊ณต")
                else: print("๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์‹คํŒจ")
        except Exception as e:
            print(f"๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์—๋Ÿฌ: {e}")

    def update_data(self, sql):
        try:
            with self.connection.cursor() as cursor:
                indata = cursor.execute(sql)
                if(indata>0): print(f"{indata} ๊ฑด์˜ ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์„ฑ๊ณต")
                else: print("๋ฐ์ดํ„ฐ ์ˆ˜์ • ์‹คํŒจ")
        except Exception as e:
            print(f"๋ฐ์ดํ„ฐ ์ˆ˜์ • ์—๋Ÿฌ: {e}")

    def delete_data(self, sql):
        try:
            with self.connection.cursor() as cursor:
                indata = cursor.execute(sql)
                if(indata>0): print(f"{indata} ๊ฑด์˜ ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์„ฑ๊ณต")
                else: print("๋ฐ์ดํ„ฐ ์‚ญ์ œ ์‹คํŒจ")
        except Exception as e:
            print(f"๋ฐ์ดํ„ฐ ์‚ญ์ œ ์—๋Ÿฌ: {e}")

 

 

 

 

PowerClass ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

 

 

# PowerClass ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
host = "localhost"
port = 3306
user = "gjuser"
password = "dbdb"
db = "gjdb"
power_instance = PowerClass(host, port, user, password, db)

 

 

 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ

 

 

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ
power_instance.connect_db()

 

 

 

๋ฐ์ดํ„ฐ ์กฐํšŒ

 

# ๋ฐ์ดํ„ฐ ์กฐํšŒ
select_query = '''
    SELECT time 
    FROM time_power_demand 
    WHERE power >= 90000
'''

power_instance.select_data(select_query)
# df_result = pd.DataFrame(result)
# print("์กฐํšŒ ๊ฒฐ๊ณผ:", result)
# df_result

 

 

 

 

๋ฐ์ดํ„ฐ ์ž…๋ ฅ

 

# ๋ฐ์ดํ„ฐ ์ž…๋ ฅ
insert_query = '''
    INSERT INTO time_power_demand VALUES ('2020-01-05', '3์‹œ', 65210)
    '''
power_instance.insert_data(insert_query)

 

 

 

 

๋ฐ์ดํ„ฐ ์ˆ˜์ •

 

# ๋ฐ์ดํ„ฐ ์ˆ˜์ •
update_query = '''
    UPDATE time_power_demand SET ymd = '2020-01-20'
    WHERE ymd = '2020-01-05' AND power = 65210
'''

power_instance.update_data(update_query)

 

 

 

๋ฐ์ดํ„ฐ ์‚ญ์ œ

 

# ๋ฐ์ดํ„ฐ ์‚ญ์ œ
delete_query = '''
    DELETE FROM time_power_demand
    WHERE ymd = '2020-01-20'

'''

power_instance.delete_data(delete_query)

 

 

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ข…๋ฃŒ 

 

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ข…๋ฃŒ
power_instance.close_db()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•

loading