

python -m pip install cx_Oracle --upgrade
import cx_Oracle as oci
con = oci.connect("scott/tiger@localhost:1521/orcl")
cur = con.cursor()
#fetchone
#sql 실행
sql = "SELECT * FROM EMP"
cur.execute(sql)
while True:
row = cur.fetchone() # fetchone으로 한줄씩 꺼내서 row로 저장
if row is None: #row가 없으면 (None)
break #(멈추고)
print(row)

#sql 실행
sql = "SELECT * FROM EMP"
cur.execute(sql)
#
row = cur. fetchone()
#
while row is not None:
print(": ".join([str(col) for col in row ])) #1
row = cur. fetchone() #2
#1 문자열을 하나하나 담아서 join해주면 됨. 반복문 리스트를 쓸거야 row 안에서 여러 개의 열의 값을 가져온다, 열은 str으로 바꿔서
#2 row가 계속 반복되어야 하니까 또 적어줘

sql = "SELECT EMPNO, ENAME FROM EMP"
cur.execute(sql)
#
row = cur. fetchone()
#
while row is not None:
empno, ename = row
print(empno, ename)
row = cur. fetchone()

# sql 실행
sql = "SELECT EMPNO, ENAME FROM EMP"
cur.execute(sql)
#
while True:
row = cur.fetchone()
if row is None:
break
data1 = row[0]
data2 = row[1]
print("%5s %10s" % (data1, data2))
5자리의 string>> blank+ 4자리의 empno/10자리 뒤에서부터 채워져! (data1, data2)=> like format 함수

# fetchall
#sql 실행
sql = " SELECT * FROM EMP"
cur.execute(sql)
#
rows = cur.fetchall()
if rows:
for row in rows: # rows 안에는 모든 결과가 있기 때문에 1줄씩 꺼내서 봐야해
print(row)
fetchall 과 fetchone은 가져오는 방식이 달라

print 부분만 이렇게 바꾸면
print(": ".join([str(col) for col in row ]))

예쁘게 정렬~
sql = "SELECT EMPNO, ENAME FROM EMP"
cur.execute(sql)
#
rows = cur. fetchall()
if row:
for row in rows:
empno, ename = row
print(empno, ename)

sql = "SELECT EMPNO, ENAME FROM EMP"
cur.execute(sql)
#
rows = cur.fetchall()
if rows:
for row in rows:
data1 = row[0]
data2 = row[1]
print("%5s %10s" % (data1, data2))

sql = "SELECT * FROM EMP A, SALGRADE B WHERE A.SAL BETWEEN B.LOSAL AND B.HISAL"
cur.execute(sql)
#
rows = cur.fetchall()
if rows:
for row in rows:
print(row)

sql = " SELECT * FROM EMP"
cur.execute(sql)
#
rows = cur.fetmany(5)
if rows:
for row in rows: # rows 안에는 모든 결과가 있기 때문에 1줄씩 꺼내서 봐야해
print(row)

import pandas as pd
sql = "SELECT * FROM EMP"
df = pd.read_sql_query(sql, con)
print(df)

# sql 실행 - DDL(data definition language, 자동 커밋이 됨. sql만 실행시키면 됨)
sql = "CREATE TABLE EXAM_ID (ID INT)"
cur.execute(sql)
#
print(cur.execute("SELECT * FROM EXAM_ID").fetchall())

while True:
data1 = input("ID를 입력하세요(정수)> ")
if data1 == "":
break
sql = "INSERT INTO EXAM_ID VALUES('" + data1 + "')"
cur.execute(sql)
sql = "DROP TABLE EXAM_ID VALUES('" + data1 + "')"
cur.execute(sql)
#
print(cur.execute("SELECT * FROM EXAM_ID").fetchall())
con.commit() # con.=connection gml 같은 건 반드시 commit
con.rollbakc()
con.close() # 모든 프로그램은 끝날 때 close 해줘야해