본문 바로가기
Python

[파이썬] MySQL

by AI미남홀란드 2021. 2. 6.
728x90

**SQL

1.DDL : 데이터 구조를 생성하고 삭제하는 명령어

1) 테이블 생성

create table 테이블이름(

컬럼이름 자료형 제약조건 ,

컬럼이름 자료형 제약조건 ,

...

테이블 제약조건

)engine=InnoDB DEFAULT CHARSET=utf8

 

->자료형

문자 : char(글자수) , varchar(글자수) , text - 글자수는 한글인 경우는 * 3

숫자 : int , float , double

날짜 : date , time , datetime , timestamp

 

->제약조건

primary key : not null , unique ( 널값이 x 유니크해야한다) - 테이블에서 한 번만 지정할 수 있음  (자동 index)

not null : 필수 입력 ( 널 값이 없어야댐)  

unique : 유일(중복이면 안됨)    ( 자동 index) 

check: 값의 범위나 종류를 제한 할때 씀 ( 이거만 해야함 , 어디서 부터 어디까지)

foreign key: 다른 테이블의 값을 참조할 때 사용 (* 기본키와 중요한 개념 *)

-> 부모 테이블에서 데이터가 변경되거나 삭제될 때 자식 테이블에서 동작을 같이 설정할 수 있습니다.

 

2) 테이블 구조 수정

ALTER TABLE 테이블 이름 수정할 내용

3) 테이블 삭제

DROP TABLE 테이블 이름

default

 

2. 데이터 삽입 , 삭제 , 수정

1) 삽입

insert into 테이블이름(컬럼이름 나열) values(삽입할 값을 나열);

 

2) 수정

update 테이블이름 set 수정할 컬럼이름 = 값 , 수정할 컬럼이름 = 값.....

where 조건

 

3) 삭제

delete from 테이블이름 where 조건

-> where 가 없으면 테이블의 모든 데이터 삭제

 

3. 검색

select 조회할 내용을 나열

from 조회할 테이블 이름 

where 조회할 조건

group by 그룹으로 묶을때

having  ( group by 이후에 조건 )

order by 정렬할 조건

limit 시작번호 , 데이터 개수

 

-> select 와 from 은 필수

 

4. TCL

1) commit : 작업을 완료하고 현재까지 수행한 내용을 원본에 반영

2) rollback : 작업을 취소 - 현재까지 작업한 내용을 원본에 반영하지 않는다.

 

 

transaction : 어떤 작업의 논리적 단위

 

 

 

** my sql

1) 다운로드 설치( dev.mysql.com/downloads/installer/) macos : brew 설치 후 brew 로 인스톨

2) 설치 위치 , 포트 번호 , 관리자 비밀번호 등 설정해서 설치

 

2.sql 설치

 

 

firewall(방화벽) : 외부에서 자신의 컴퓨터에게 접속할 때 거치는 sw나 sw가 설치된 hw , 방화벽이 설정되어 있으면 외부에서 자신의 컴퓨터에 접속이 안됩니다.

 

proxy : 내부 네트워크에서 외부로 나갈 때 거치는 sw 나 sw 가 설치된 컴퓨터 - 특정 네트워크로 접속하지 못하도록 하기 위해서 설정

 

** 데이터베이스 연동 - MySQL 연동

1. 관계형 데이터베이스 연동 할 때 필요한 정보

1) 데이터베이스 서버의 URL 

localhost : 현재 작업 중인 컴퓨터

 

127.0.0.1 : 현재 작업 중인 컴퓨터 - 외부에서 들어오는 것처럼 현재 작업중인 컴퓨터로 접속 : 방화벽이 오픈되어 있어야 합니다.

 

2) 데이터베이스 프로그램의 포트번호 : 3306

-> 컴퓨터에서 실행되고 있는 프로세스를 구분하기 위한 번호

-> 기본 포트 번호 : oracle(1521) , MySQL(3306)

 

3) 계정 : Access 나 Mongo DB에서는 없는 경우가 있음

-> 아이디와 비밀번호 : user01 ~ user10 , user01 ~ user10

 

4) 데이터베이스의 이름 : user01 ~ user10

-> Oracle 에서는 sid

-> mysql 에서는 database 이름

 

2. 데이터베이스 접속 프로그램

-> 데이터가 저장된 곳은 데이터베이스 서버라고 하고 이 데이터베이스에 접속할 때 자신의 컴퓨터에 데이터베이스를

설치하는 것이 아니고 접속프로그램을 설치해서 사용을 합니다.

-> 접속 프로그램은 하나의 데이터베이스에만 접속할 수 있도록 데이터베이스 회사나 일반 기업에서 만든 프로그램이 있고 여러 데이터

베이스에 접속 할 수 있도록 만든 프로그램도 있습니다.

-> dbeaver 프로그램 : 여러 데이터베이스에 접속 할 수 있도록 만든 프로그램

dbeaver.io/download

-> 데이터베이스 사용을 위한 준비

               데이터베이스에 해당하는 드라이버 : 어느 정도 까지는 자동 다운로드

                접속정보 :

데이터 베이스를 선택하는 일은 정말 어렵다고 한다.

공부용으로 쓰기에 나쁘지 않은 것이 mysql postgreSql d 등 라이트하게 해볼 수 있다.

 

-> 처음 접속할 때는 커넥션을 생성해서 데이터베이스에 연결할 수 있도록 해 주어야 합니다.

-> 명령문을 실행하기 위해서는 접속을 하고 커넥션을 선택하고 마우스 오른쪽을 클릭해서 [SQL - 편집기] - [새 SQL 편집기]를 실행.

 디비버로 mySQL을 실행하는법

2) mySQL 의 SQL(관계형 데이터베이스에 작업을 수행하기 위한 언어) 실행

-> 처음 공부를 할 때는 mySQL 을 사용하는게 좋은데 그 이유는 다른 데이터베이스의 SQL 과 거의 유사하기 때문이다.

스마트 폰 애플리케이션 제작을 할 때 사용하는 로컬 데이터베이스인 SQLite 도 mySQL 과 거의 유사한 SQL을 사용합니다.

 

-> 사용 가능한 데이터베이스를 확인

show databases;

 

-> 사용할 데이터베이스를 선택

use database01

 

-> SQL을 사용할 때 주의하실 점

원래는 SQL의 마지막은 ; 입니다.

접속 프로그램에서는 ; 을 붙히지 않아도 블럭을 잡아서 실행하면

에러가 아닙니다.

프로그래밍 언어에서는 대부분 ; 을 붙히면 에러입니다.

 

 

#테이블 생성 
#데이터 삽입

데이터 조회 한 모습 모든 컬럼명을 입력해서 조회를 할 수 있지만 모든 조회를 하는 경우 * 를 이용해서 쓰는게 편하다.

 

 

where 절 조건식을 이용한다 where 절에 원하는 조건을 넣으면 된다

 

* 즉 처음에 나도 이렇게 생각했다 . 

셀렉? 무조건 찾는 대상!
프롬? 어디로부터 테이블로부터

웨얼? 무엇을 찾을건데? 

이런식으로 생각해서 테이블에서 데이터를 찾았는데 정말 뭔가 기억하기 쉬웠던거 같다

 

3.python에서 mySQL 연동

1) pyMySql 이라는 패키지를 설치해야 합니다.

pip install pymysql 명령을 터미널이나 cmd 창에서 수행.

 

2) 연결

import pymysql

이름 = pymysql.connect(host='데이터베이스url',port = 포트번호,user='id' ,passwd='비밀번호',db='데이터베이스이름',charset='인코딩방식')

파이썬에서 DB 연결

3) 연결해제

 

이름.close()

 

4) select(검색)을 제외한 sql 실행

변수이름 = 연결이름.cursor()

 

변수이름.execute('실행할 SQL 문장')

변수이름.execute('실행할 SQL 문장에 모르는 값은 %s로 설정', %s에 대입할 데이터를 나열)); - > 이 방법을 사용하는 것이 보안에도 유리하다

#인스턴스 생성
cursor = con.cursor()

#데이터 삽입 파이썬에서 
cursor.execute("insert into usertb1(userid,name,birthyear,addr,mobile,mdate)values('ljy','이진연',1970,'서울','0103333342','1970-10-31')")

# DB는 커밋을 해야 ,넘어간다.

con.commit()

 

#트랜잭션 완료

con.commit(0

#데이터베이스 닫기

con.close

 

-> 데이터 수정은 update :userid가 ljy 인 데이터의 name이 이지연으로 변경

'update usertbl set name='이지연' where userid='ljy'

 

-> 데이터 삭제는 delete:userid 가 ljy인 데이터를 삭제

'delete from usertb1 where userid='ljy'

 

 

 

뒤로 바인딩 하는 구조로 데이터 수정

요 방법을 쓰는 것을 추천한다고 한다. 

 

5) 데이터 검색(조회)

cursor.execute('select 구문')

데이터에 접근할 변수 = cursor.fetchone() 또는 fetchall() 을 호출

 

fetchone은 하나의 튜플을 리턴(데이터나열)

fetchall은 튜플의 튜플을 리턴((데이터나열), (데이터나열) ...)

 

 

data=cursor.fetchall()
for row in data:
    for col in row:
        print(col)

 

fetchall() 을 쓰면 모든 데이터를 가지고 온다.

6-> 6

3-> 6

열로 데이터들이 출력된다.

 

** 데이터베이스 사용

-> 왜 데이터베이스를 이용?

 

-> 프로그램은 데이터와 로직으로 구성

데이터를 저장하는 것은 변수 : 주기억 장치에 생성되기 때문에 컴퓨터를 재부팅하거나 프로그램을 재 실행하면

내용이 소멸됩니다.

 

컴퓨터를 재부팅하거나 프로그램을 재실행해도 데이터를 보존하고자 하면 보조기억장치에 데이터를 저장해야 합니다.

보조기억장치에 데이터를 저장하는 방법이 파일로 저장하는 것입니다.

일반 파일로 많은 양의 데이터를 저장하면 조회하기도 힘들고 삽입과 삭제가 어렵습니다

 

데이터를 편리하게 조회하고 삽입 및 삭제 또는 갱신 작업을 편리하게 하도록 해주는 프로그램이 데이터베이스 입니다.

 

-> 데이터 베이스 종류

관계형 데이터베이스(RDBMS) : 테이블의 집합으로 데이터를 표현하고  SQL을 이용해서 데이터베이스를 사용하는 형태

Oracle : 대기업 공공기관에서만 사용 , 유지보수 비용 비쌈

MySQL : 무료 버전이 제공 , 중소기업이나 개인 개발자들이 많이 사용하고 동일한 형식으로 만들어진 MariaDB도 있음

MS-SQL : oracle 보다는 저렴한 mircrosoft의 데이터베이스 , 외국 기업에서 많이 사용

 

Tibero : 대한민국 티맥스에서 만든 데이터베이스 , 공공기관에서 주로사용

DB2: IBM에서 만든 데이터베이스로 금융권에서 주로 이용 , 최근에는 사용빈도가 많이 떨어짐

HANADB: 독일의 SAP 에서 만든 데이터베이스로 대기업에서 Oracle 대체제로 많이 사용

SQLite: 임베디드나 IoT 분야에서 사용하는 조그마한 데이터베이스 , 기능이 적고 외부 컴퓨터에서 직접 접속이 안됨

 

2. NOSQL : 테이블의 집합이 아니라 키 -값 쌍으로 데이터를 저장하고 자바스크립트를 문법을 이용해서 데이터베이스를 사용하는 개념

 

Mongo DB : 가장 많이 알려진 NoSQL

 

FireBase : 구글이 제공하는 것으로 모바일 애플리케이션의 서버를 구현할 때 쉽게 접근할 수 있도록 해주는 서비스 

Web Hosting이나 cloud 를 배포하는 것보다 사용이 쉬워서 처음 서비스를 구현할 때 많이 이용.

 

-> database 접속 방법에 따른 분류

클라이언트 프로그램이 데이터베이스에 직접 접속: 거의 사용을 안함

데이터베이스 <-> 서버 애플리케이션 <-> 접속 서버 애플리케이션 <-> 클라이언트

 

파이썬으로 웹 프로그래밍을 하겠다는 의미는 서버 애플리케이션을 파이썬으로 만들겠다는 것입니다.

 

-> 데이터베이스 프로그래밍 방법에 따른 분류

데이터베이스 명령어를 직접 입력하는 방식

 

ORM이라고 해서 하나의 객체와 데이터를 매핑해서 사용하는 방식 - SQL을

몰라도 작업이 가능 - 명령어가 데이터베이스 명령어로 변역되서 실행

 

** GUI 프로그램 및 실행 파일 만들기

1. 클라이언트 응용 프로그램 종류

-> PC(직접설치) 나 IOT 기기(내장) 에서 실행

-> GUI 프로그램 : 윈도우 창이 있는 프로그램

-> 스마트 폰에서 실행

2. PC 나 IoT 기기의 프로그램 분류

-> console 용 프로그램 : 윈도우 창이 없는 프로그램

-> GUI 프로그램 : 윈도우 창이 있는 프로그램

3. Python에서 GUI 프로그램

-> anaconda 에 설치된 PyQt5를 많이 이용

-> PyQt5는 플랫폼(실행 되는 H/W 또는 OS) 에 상관 없이 다양한 기능을 하는 포함하는 C++ 라이브러리

PyQt5를 이용하면 윈도우 , 리눅스 , Mac 그리고 안드로이드나 ios에서 동작하는 GUI 프로그램을 만드는 것이 가능합니다.

 

1) 윈도우 창 만들기

윈도우 프로그램의 기본 구조

 

app = QApplication(sys.argv)

윈도우 창에 대한 설정

sys.exit(app.exec_())

 

-> 윈도우 생성

Qwidjet 이라는 클래스를 이용

     setWindowTitle

     move

     resize

     setGeometry

     show 

     등의 메소드를 호출해서 윈도우 창을 생성해서 출력합니다.

 

-> 아이콘 설정

setWindowIcon(QIcon(아이콘 파일 경로))

 

윈도우 창 만들고 실행

2) 툴팁 설정

-> 위젯 위에 마우스 포인터가 올라온 경우 보여지는 문자열을 툴팁이라고 합니다.

 

-> QToolTip.setFont(QFont('폰트이름'.크기)) 으로 폰트 모양을 설정 위젯.setToolTip(툴팁)

기본 윈도우를 찾을 만들기 위한 import

import sys 

from PyQt5.QtWidgets import QApplication , QWidget , QToolTip , QPushButton ,QAction ,QMainWindow

from PyQt5.QtGui import QIcon

from PyQt5.QtGui import QFont

 

#초기화 메소드에서 상위 클래스의 메소드를 호출

#내부 메소드 호출

#윈도우 창은 큐위젯으로부터 상속

#메뉴나 툴바를 사용할 떄는 큐 위젯 대신에 큐메인 윈도우로 부터 상속

class MyApp(QMainWindow):

    #초기화메소드

    def __init__(self):

        super().__init__()

        self.initUI()

    def initUI(self):

        QToolTip.setFont(QFont('sansSerif',10))

        self.setToolTip("튤팁을 추가했습니다")

        #툴바에 버튼 터치

        exitAction = QAction(

            QIcon('exit.png'),'Exit',self)

        exitAction.setShortcut('ctrl+Q')

        exitAction.setStatusTip("툴바버튼")

        

        self.statusBar().showMessage("상태표시")

        

        menubar = self.menuBar()

        menubar.setNativeMenuBar(False)

        

        filemenu = menubar.addMenu('&File')

        filemenu.addAction(exitAction)

        

        

        btn = QPushButton("버튼", self)

        ('this is a <b>Button</b>')

        btn.move(50,50)

        btn.resize(100,50)

        

        

        self.setWindowTitle("윈도우")

        #실행 파일과 동일한 경로에

        #web.png  파일을 복사해야 합니

        self.setWindowIcon(QIcon('web.png'))

        self.setGeometry(300,300,300,300)

        self.show()

#위의 창을 화면에 출력

if __name__ =='__main__':

    app = QApplication(sys.argv)

    ex = MyApp()    

    sys.exit(app.exec_())

    

-> 간단하게 윈도우 화면을 하나 만들고 파일 , exit 누를 수 있는 exe 를 만들었다.

 

2) 툴팁 설정

-> 위젯 위에 마우스 포인터가 올라온 경우 보여지는 문자열을 툴팁이라고 합니다.

QToolTip.setFont(QFont('폰트이름',크기)) 으로 폰트 모양을 설정

위젯.setToolTip툴팁

 

**PyQt5의 공식 웹사이트

https://www.riverbankcomputing.com/software/pyqt/intro 

 

Riverbank Computing | Introduction

What is PyQt? PyQt is a set of Python bindings for The Qt Company's Qt application framework and runs on all platforms supported by Qt including Windows, macOS, Linux, iOS and Android. PyQt6 supports Qt v6, PyQt5 supports Qt v5 and PyQt4 supports Qt v4. Th

www.riverbankcomputing.com

 

** Gui program

-> window(독립적으로 실행가능한 창) , widjet (control 이라고도 하는데 일반적으로 다른 위젯을 자신에게 배치할 수 없는 형태)

-> 기본 설정과 관련된 함수를 학습

-> Layout(배치 모드)

 

728x90

'Python' 카테고리의 다른 글

[파이썬] python review  (0) 2022.10.25
[파이썬] 웹 프로그래밍  (0) 2021.02.07
[파이썬] 기본 네트워크 & 데이터 처리  (0) 2021.01.31
[파이썬] 자료규조  (0) 2021.01.31
[파이썬] 메모리관리  (0) 2021.01.30