비밀번호가 존재하는 mysql 을 실행하기 위해서는 아래와 같은 명령어를 입력한다.
mysql --user=username db_name -p
'주식필터프로그램 제작하기 > MYSQL' 카테고리의 다른 글
mysql 실행 명령어 (0) | 2020.12.16 |
---|
비밀번호가 존재하는 mysql 을 실행하기 위해서는 아래와 같은 명령어를 입력한다.
mysql --user=username db_name -p
mysql 실행 명령어 (0) | 2020.12.16 |
---|
비밀번호가 존재하는 mysql 을 실행하기 위해서는 아래와 같은 명령어를 입력한다.
mysql --user=username db_name -p
mysql 실행 명령어 (0) | 2020.12.16 |
---|
지난 포스팅에서는 pymysql 로 mysql을 제어하는법을 알아 보았다.
그런데 포스팅한대로 쿼리를 보내다 보니,
갑자기 DELETE와 INSERT명령어로 요청한 쿼리가 실제 DB에 반영이 안되는 현상이 나타났다.
아래 세 가지가 동시에 나타난다면 이 글이 매우 도움이 될 것 이다.
[현상]
1. python에서 mySQL로 쿼리를 전송하는 명령어를 실행할 때 빌드 오류가 없다.
2. 쿼리 실행 시, python 터미널 창에서는 쿼리에 대한 RESPONSE가 정상적이다.
3. 그러나 mySQL에서 확인한 최종 DB는 변함이 없다.
[문제의 CODE]
conn = pymysql.connect(user='user', password='pasword', host = 'host', database = 'database')
cur = conn.cursor()
cur.execute("DELETE FROM `database`,`table`")
cur.close()
conn.close()
[수정된 CODE]
conn = pymysql.connect(user='user', password='pasword', host = 'host', database = 'database')
cur = conn.cursor()
cur.execute("DELETE FROM `database`,`table`")
cur.close()
conn.commit()
conn.close()
[해설]
conn.commit() 한줄만 추가하면 된다.
보통 수많은 예제들이 commit 없이,
cursor와 connection만 close를 하는데, 그렇게 되면 mySQL에 반영이 되지 않는다.
혹은 connection 을 만들 때, autocommit=TRUE 옵션을 추가하는것도 또하나의 방법이다.
둘중에는 보안상 더 안전한 commit()함수를 추천한다.
MYSQL 기본 명령어 정리 (0) | 2020.12.05 |
---|---|
파이썬 PYMYSQL 기본 명령어 정리 (0) | 2020.12.04 |
CTRL+ ENTER
명령어 | 예시 | 의미 |
SHOW DATABASES | SHOW DATABASES | 현재 서버에 어떤 DB가 있는지 보기 |
USE | USE database_name | database_name의 DB를 사용하겠다. |
SHOW TABLES | DB에 있는 테이블 리스트를 보여줘 | |
SHOW TABLE STATUS | DB에 있는 테이블 상세리스트를 보여줘를 상세히 보여줘 | |
DESCRIBE(DESC) | DESCRIBE table_name | table_name 테이블의 정보를 보여줘 |
SELECT | 데이터를 가져와 | |
SELECT FROM | SELECT * FROM table_name | table_name 테이블에 있는 전체 정보를 보여줘 |
SELECT colum_name FROM table_name | table_name 테이블에 colum_name의 colum만 보여줘 | |
SELECT colum_name_1, colum_name_2 FROM table_name | table_name 테이블에 colum_name_1과 colum_name_2의 colum만 보여줘 | |
SELECT FROM WHERE | SELECT * FROM table_name WHERE 조건_1 ※ 예) colum_name_1>10 ※ OR, AND, NOT, =, <, >, <=, >=, <>, != 등 사용가능 |
table_name 테이블에 조건1에 맞는 행들만 보여줘 예) colum_name_1이 10보다 큰 행들만 보여줘 |
SLEECT * FROM table_name WHERE 조건_1 AND 조건2 |
table_name 테이블에 조건1과 조건2를 동시에 만족하는 행등만 보여줘 | |
SELECT FROM WHERE BETWEEN |
SELECT * FROM table_name WHERE colum_name BETWEEN 10 AND 100 |
colum_name이 10 이상 100이하인 데이터 |
SELECT FROM WHERE IN |
SELECT * FROM table_name WHERE colum_name IN('value_1', 'value_2', 'value_3') |
colum_name이 value_1이거나 value_2이거나 value_3인 데이터 |
SELECT FROM WHERE LIKE |
SELECT * FROM table_name WHERE colum_name LIKE 'ABC_' ※_는 1글자 대체 |
ABC로 시작하는 네글자가 단어가있는 모든 데이터 |
SELECT * FROM table_name WHERE colum_name LIKE 'ABC%' ※%는 2글자 이상 대체 |
ABC로 시작하는 단어가있는 모든 데이터 | |
(SUB QUERY) | SELECT * FROM table_name WHERE colum_name = ( SELECT coum_name FROM table_name WHERE 조건) |
쿼리문 안에 또다른 쿼리문이 있는 것 ※ 서브 쿼리의 결과가 둘 이상이 되면 에러 발생 |
ANY (SUB QUERY) | WHERE colum_name > ANY (SUB QUERY) | 서브쿼리의 여러개의 결과 중 한가지만 만족해도 가능 ※ =ANY 는 IN 과 동일한 의미 ※ ANY는 SOME과 동일한 의미 |
ALL (SUB QUERY) | WHERE colum_name > ALL (SUB QUERY) | 서브쿼리의 모든 결과를 모두 만족해야 함 |
SELECT FROM ORDER BY | SELECT * FROM table_name ORDER BY colum_name (ASC) | colum_name을 기준으로 오름차순 정렬 |
SELECT * FROM table_name ORDER BY colum_name DESC | colum_name을 기준으로 내림차순 정렬 | |
SELECT * FROM table_name ORDER BY colum_name_1 ASC, colum_name_2 DESC | Colum_name_1을 기준으로 오름차순 정렬 Colum_name_2을 기준으로 내림차순 정렬 |
|
SELECT FROM WHERE ORDER BY | ||
DISTINCT | SELECT DISTINCT colum_name FROM table_name |
colum_name의 중복된 것은 1개씩만 보여주면서 출력 |
LIMIT | SELECT * FROM table_name ORDER BY colum_name LIMIT 10 |
상위의 N개만 출력 ※서버의 처리량을 줄이도록함 |
GROUP BY (집계함수를 같이 사용 ex. AVG, MIN, MAX, COUNT, COUNT(DISTINCT), STDEV, VARIANCE |
SELECT colum_name_1 MAX(colum_name_2) FROM table_name GROUP BY colum_name_1 |
colum_name_1 기준으로 그룹화하는데 그중에서 colum_name_2가 가장 큰 데이터만 출력한다. |
GROUP BY AS | SELECT colum_name_1 AVG(colum_name_2) AS 'Average' FROM table_name GROUP BY colum_name_1 |
colum_name_1 기준으로 그룹화하는데 그중에서 colum_name_2의 평균값을 출력한다. 평균값 데이터의 colum_name은 Average로 표기한다. |
SELECT COUNT(*) FROM table_name |
||
SELECT AVG(colum_name) FROM table_name |
||
Having | WHERE과 비슷한 개념으로 조건 제한 집계 함수에 대해서 조건 제한하는 편리한 개념 HAVING 절은 반드시 GROUP BY 절 다음에 나와야함 |
|
SELECT colum_name_1, MAX(colum_name_2) FROM table_name GROUP BY colum_name_1 HAVING MAX (colum_name_2) > 10 |
||
ROLLUP | 총합 또는 중간합계가 필요할 경우 사용 GROUP BY 절과 함께 WITH ROLUP 문으로 사용 |
|
SELECT colum_name_1, Name, SUM(colum_name_2) FROM table_name GROUP BY colum_name_1, Name WITH ROLLUP |
묶인 그룹의 총합을 각 그룹의 마지막 행에 출력한다. | |
JOIN | SELECT * FROM table_name_1 JOIN table_name_2 ON table_name1.colum = table_name2.colum |
여러테이블에서 가져온 레크드롤 조합하여 하나의 테이블이나 결과 집합으로 표현 ON 뒤에는 합칠 조건 |
SELECT * FROM table_name_1 JOIN table_name_2 ON table_name1.colum = table_name2.colum JOIN table_name_3 ON table_name_1.colum = table_name_3.colum |
세개의 테이블 합칠경우 |
명령어 | 예 | 의미 |
LENGTH() | SELECT LENGTH('ABC') | 문자열 길이 |
CONCAT() | SELECT CONCAT('A', 'B', 'C') | 문자열 세개를 합쳐서 저장 ※ 문자열 중 하나라도 NULL이 있으면 NULL 을 반환한다. |
LOCATE() | SELECT LOCATE('ABC', 'ABABBCABCABC') ->7 반환 | 문자열처음 나타나는 위치 찾기 (1부터) 찾는 문자열이 문자열 내에 존재하지 않으면 0을 반환 |
LEFT() | SELECT LEFT('ABCD',3) -> ABC반환 | 문자열의 왼쪽부터 지정한 개수만큼 문자 반환 |
RIGHT() | SELECT RIGHT('ABCD',3) ->BCD반환 | |
LOWER() | SELECT LOWER('ABC') -> abc | |
UPPER() | SELECT UPPER('abc') ->ABC | |
REPLACE() | SELECT REPLACE('ABCDE', 'ABC', 'AAA') -> AAADE | |
TRIM() | SELECT TRIM(' | 문자열 양쪽모두에 있는 특정문자를 제거 BOTH : 기본설정 제거할 문자를 명시하지 않으면 자동으로 "공백"을 제거 |
TRIM(LEADING) | SLECT TRIM(LEADING '@' FROM '@gmail.com@') |
전달받은 문자열 앞에 존재하는 특정 문자를 제거 |
TRIM(TRAILING) | SLECT TRIM(TRAILING '@' FROM '@gmail.com@') | 전달받은 문자열 뒤에 존재하는 특정 문자를 제거 |
FORMAT | SELECT FORMAT(숫자, 소숫점자리수) | 숫자타입의 데이터를 세자리마다 쉼표 형식으로 변환 #,###,###.## ※ 반환되는 데이터 형식은 문자열 타입 ※ 두번째 인수는 반올림할 소수 부분의 자릿수 |
FLOOR | 내림 | |
CEIL | 올림 | |
ROUND | 반올림 | |
SQRT | 양의 제곱근 | |
POW | POW(밑수,지수) | 거듭제곱 |
EXP | EXP(지수) | e의 거듭제곱 |
LOG | 자연로그값 | |
SIN, COS, TAN | SIN(PI()/2) | |
ABS | 절대값 | |
RAND | ROUND(RAND()*100,0) | 0.0보다 크거나 같고 1.0보다 작은 하나의 실수를 무작위로 생성 |
NOW | YYYY-MM-DD HH:MM:SS또는 YYYYMMDDHHMMSS 형태로 반환 |
|
CURDATE | YYYY-MM-DD 또는 YYYYMMDD 반환 | |
CURTIME | HH:MM:SS 또는 HHMMSS형태로 반환 | |
DATE, MONTH, DAY, HOUR, MINUTE, SECOND | ||
MONTHNAME, DAYNAME | ||
DAYOFWEEK, DAYOFMONTH, DAYOFYEAR |
WEEK : 일 = 1, 토 = 7 MONTH : 0~31 YEAR : 1~366 |
|
DATE_FORMAT | DATE_FORMAT(NOW(), '%D %y %a %d %m %n %j') | 형식에 맞춰 날짜와 시간을 반환 |
명령어 | 예제 | 의미 |
CREATE TABLE AS SELECT | CREATE TABLE new_table_name AS SELECT * FROM table_name |
table_name 과 똑같은 new_table_name을 만든다 |
CREATE DATABASE | CREATE DATABASE database_name | database_name의 새로운 DB를 만든다. |
CREATE TABLE | CREATE TABLE table_name( id INT NOT NULL PRIMARY KEY, col1 INT NULL col2 INT NULL col3 INT NULL ) |
colum 개수/속성을 정하면서 테이블 만듬 |
ALTER TABLE | ||
ALTER TABLE ADD | ALTER TABLE table_name ADD col4 INT NULL; |
colum 추가 |
ALTER TABLE MODIFY | ALTER TABLE table_name MODIFY col4 VARCHAR(20) NULL; |
colum 수정 |
ALTER TABLE DROP | ALTER TABLE table_name DROP col4; |
colum 삭제 |
INDEX | ||
SHOW INDEX | ||
CREATE INDEX | ||
CREATE UNIQUE INDEX | ||
FULLTEXT INDEX | ||
ALTER TABLE INDEX | ||
DROP INDEX | ||
VIEW | ||
CREAT VIEW | CREATE VEIW view_name AS SELECT col1, col2 FROM table; |
|
ALTER VIEW | ALTER VEIW view_name AS SELECT col1, col2, col3 FROM table; |
|
DROP VIEW | DROP VIEW view_name | |
INSERT | INSERT INTO table_name VALUE(val_1, val_2, val_3); |
table_name에 행을 추가함 |
INSERT INTO SELECT | INSERT INTO table_name_1 SELECT * FROM table_name_2 |
table_name_2에 있는 행들을 table_name_1에 삽입 |
UPDATE | UPDATE table_name SET col1=1, col2=1, col3=1 |
기존에 있는 값 변경 ※WHERE 안쓰면 설정한 값으로 모든 행 변경한다. |
UPDATE WHERE | UPDATE table_name SET col1=1, col2=1, col3=1 WHERE colum_name = 1 |
colum_name이 1인 행의 값을 1, 1, 1로 바꾼다. |
DELETE | DELETE FROM table_name | 모든 행 다 없앰 ※데이터는 지워지지만 테이블 용량은 줄어들지 않음 ※삭제 후 잘못 삭제한 것은 되돌릴 수 있음 |
DELETE WHERE | DELETE FROM table_name WHERE colum_name = 1 |
colum_name이 1인 행을 없앰 |
TRUNCATE | TRUNCATE TABLE table_name | 모든 행 다 없앰 ※ 용량 줄어들고, 인덱스 모두삭제 ※ 테이블 삭제 않고 데이터만 삭제 ※ 한꺼번에 다 지워야함 ※ 삭제 후 되돌릴 수 없음 |
DROP TABLE | DROP TABLE table_name | table 완전삭제 |
DROP DATABASE | DROP DATABASE database_name | database 완전삭제 |
pymysql 로 SELECT 는 되는데 DELETE, INSERT 등 명령어가 적용 안될 때 해결법 - commit 함수 (0) | 2020.12.14 |
---|---|
파이썬 PYMYSQL 기본 명령어 정리 (0) | 2020.12.04 |
1. MYSQL 설치
$ pip install PyMySQL
2. 파이썬에서 필수 명령어들
import pymysql #mysql 라이브러리 불러오기
conn = pymysql.connect(host ="localhost", user="root", passwd="****", db="mysql")
※ conn : 연결 객체,
host : 연결주소( local 일 경우 localhost)
user/paswd : 가입시 입력한 아이디 비밀번호
db : ?????
cur = conn.cursor() # 연결 객체로부터 커서를 만듬. (한 연결에 커서는 여러개일 수 있다.)
cur.execute("...") # cur.execute로 명령어 실행 (" ") 안에 명령어 입력
cur.execute("...")
cur.execute("...")
...
cur.execute("...")
print(cur.fetchone()) # 출력해보기 cur.fetchone() : 한 줄 씩 읽음
print(cur.fetchall()) # 출력해보기 cur.fetchall() : 전체 다 읽음
cur.close() # 커서객체 닫기
conn.close() # 연결객체 닫기
쓰는 방법은 매우간단하다.
1. 호스트에 연결
2. 커서불러오기
3. 명령어 실행(생성/삭제/편집 ... 등)
4. 커서 닫기
5. 연결 닫기
1,2,4,5번은 모두 고정적으로 해야하는 것이고 3번이 관건이다.
결국엔 어떤 명령어를 사용해서 db를 편집해야하는가가 문제이다.
다음 포스팅에서는 3번에서 사용가능한 명령어들을 알아보겠다.
pymysql 로 SELECT 는 되는데 DELETE, INSERT 등 명령어가 적용 안될 때 해결법 - commit 함수 (0) | 2020.12.14 |
---|---|
MYSQL 기본 명령어 정리 (0) | 2020.12.05 |