Python

Python14 - Pymssql(MS SQL 연동)

inderrom 2023. 1. 3. 19:18

( cmd에서 ipconfig를 치면 ip주소를 포함한 주소를 알 수 있음 )

ORM은 rdb와 java를 연결해주는 툴

 

mysql, ms sql, maria db

db2 postage db

access 

sqlite - 안드로이드에 주로 들어감..

 

 

------------------------------------------------------------------------------

 

 

[window]

 

 

Python과 ms sql 연동

 

pymssql 드라이버 설치는 cmd창에서 

pip install pymssql

명령어로 install 해주는 게 간단하다.

제일 최신 버전으로 인스톨 된다.

 

 


# pymssql 패키지 import
import pymssql
 
# MSSQL 접속
conn = pymssql.connect(server="name", user="id", password="password", database="table_name", charset='utf8')
 
# Connection 으로부터 Cursor 생성
cursor = conn.cursor()
 
# SQL문 실행
cursor.execute('SELECT * FROM emp;')
 
# 데이타 하나씩 Fetch하여 출력
row = cursor.fetchone()
while row:
    print(row[0], row[1])
    row = cursor.fetchone()
   
# 연결 끊기
conn.close()

 

처음에는 버전이 맞지 않아서 import에 오류가 난다.

이클립스를 재부팅 시키고 좀 기다리면 PYTHONPATH 설정창이 나타난다.

 

 

select all -> apply

 

실행시키면, 다시 오류가 남 (....- -)

 

Traceback (most recent call last):
  File "src\pymssql\_pymssql.pyx", line 647, in pymssql._pymssql.connect
  File "src\pymssql\_mssql.pyx", line 2109, in pymssql._mssql.connect
  File "src\pymssql\_mssql.pyx", line 701, in pymssql._mssql.MSSQLConnection.__init__
  File "src\pymssql\_mssql.pyx", line 1818, in pymssql._mssql.maybe_raise_MSSQLDatabaseException
  File "src\pymssql\_mssql.pyx", line 1835, in pymssql._mssql.raise_MSSQLDatabaseException
pymssql._mssql.MSSQLDatabaseException: (20009, b'DB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist ()\nNet-Lib error during Unknown error (10061)\nDB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist ()\nNet-Lib error during Unknown error (10061)\n')

During handling of the above exception, another exception occurred:

 

구성관리자에서 TCP/IP 속성을 사용으로 바꿔야한다!

 

 

 

돋보기 창에서 Sql Server Manager 검색!

 

네트워크 구성 -> 프로토콜 -> 사용
설정을 한 후 SQL Server 서비스로 들어가서 SQL Server를 재시작해준다.

 

실행 시키면 SELECT 문 완성!

server에는 ip주소를 넣어도 된다.

fetchall : 전체를 가져온다.

fetchone : 배열을 하나씩 가져올 수 있다.

 

 

INSERT

 

# pymssql 패키지 import
import pymssql
 
# MSSQL 접속
conn = pymssql.connect(server="DESKTOP-N1VNJGL", user="sa", password="python", database="python", charset='utf8')
 
# Connection 으로부터 Cursor 생성
cursor = conn.cursor()
 
# SQL문 실행 (insert)
query = "INSERT INTO EMP VALUES('3','3','3','3')"
cursor.execute(query)
conn.commit()

# 연결 끊기
conn.close()

 

**

줄을 바꿔도 오류가 나지 않으려면 따옴표를 3개씩 써주면 된다

query = """INSERT INTO EMP VALUES('3','3','3','3')

        """

 

 

UPDATE

 

# pymssql 패키지 import
import pymssql
 
# MSSQL 접속
conn = pymssql.connect(server="DESKTOP-N1VNJGL", user="sa", password="python", database="python", charset='utf8')
 
# Connection 으로부터 Cursor 생성
cursor = conn.cursor()
 
# SQL문 실행
query = "UPDATE EMP SET e_id=4,e_name=4,sex=4,addr=4 WHERE e_id=3"
cursor.execute(query)
conn.commit()
# 연결 끊기
conn.close()

*******

# pymssql 패키지 import
import pymssql
 
# MSSQL 접속
conn = pymssql.connect(server="DESKTOP-N1VNJGL", user="sa", password="python", database="python", charset='utf8')
# Connection 으로부터 Cursor 생성
cursor = conn.cursor()

e_id = '3'
e_name = '6'
sex = '6'
addr = '6'
 
# SQL문 실행
sql = f"""
        UPDATE EMP
        SET 
            e_name = '{e_name}',
            sex = '{sex}',
            addr = '{addr}'
        WHERE 
            e_id = '{e_id}'
    """
cursor.execute(sql) 
conn.commit()
# 연결 끊기
conn.close()

f {} 를 써주는 것이 직관적이라 좋다.

 

print(cursor.rowcount)

- rowcont 행의 수를 출력한다.

 

 

 

DELETE

 

# pymssql 패키지 import
import pymssql
 
# MSSQL 접속
conn = pymssql.connect(server="DESKTOP-N1VNJGL", user="sa", password="python", database="python", charset='utf8')
 
# Connection 으로부터 Cursor 생성
cursor = conn.cursor()
 
# SQL문 실행
query = "DELETE FROM EMP WHERE e_id=3"
cursor.execute(query)
conn.commit()
# 연결 끊기
conn.close()