파이썬 프로그램을 사용하여 MySQL 데이터베이스에 어떻게 연결합니까?
Python에서 MySQL 데이터베이스에 어떻게 연결합니까?
질문자 :Marc Lincoln
3단계로 Python 2로 MYSQL에 연결
1 - 설정
작업을 수행하기 전에 MySQL 드라이버를 설치해야 합니다. PHP와 달리 Python에는 SQLite 드라이버만 기본적으로 설치됩니다. 가장 많이 사용하는 패키지는 MySQLdb 이지만 easy_install을 사용하여 설치하기는 어렵습니다. MySQLdb는 Python 2만 지원합니다.
Windows 사용자의 경우 MySQLdb 의 exe를 얻을 수 있습니다.
Linux의 경우 이것은 일반 패키지(python-mysqldb)입니다. (다운로드할 명령줄에서 sudo apt-get install python-mysqldb
(debian 기반 배포판의 경우), yum install MySQL-python
(rpm 기반의 경우) 또는 dnf install python-mysql
(현대적인 fedora 배포판의 경우)을 사용할 수 있습니다.)
Mac의 경우 Macport를 사용하여 MySQLdb를 설치할 수 있습니다.
2 - 사용법
설치 후 재부팅합니다. 이것은 필수 사항은 아니지만 문제가 발생하면 이 게시물의 다른 3~4개 질문에 답하지 못하게 됩니다. 따라서 재부팅하십시오.
그런 다음 다른 패키지를 사용하는 것과 같습니다.
#!/usr/bin/python import MySQLdb db = MySQLdb.connect(host="localhost", # your host, usually localhost user="john", # your username passwd="megajonhy", # your password db="jonhydb") # name of the data base # you must create a Cursor object. It will let # you execute all the queries you need cur = db.cursor() # Use all the SQL you like cur.execute("SELECT * FROM YOUR_TABLE_NAME") # print all the first cell of all the rows for row in cur.fetchall(): print row[0] db.close()
물론 수천 가지 가능성과 옵션이 있습니다. 이것은 아주 기본적인 예입니다. 문서를 살펴봐야 할 것입니다. 좋은 출발점 .
3 - 고급 사용법
작동 방식을 알게 되면 ORM 을 사용하여 SQL을 수동으로 작성하지 않고 테이블이 Python 객체인 것처럼 테이블을 조작할 수 있습니다. Python 커뮤니티에서 가장 유명한 ORM은 SQLAlchemy 입니다.
나는 그것을 사용하기를 강력히 권합니다. 당신의 삶은 훨씬 쉬워질 것입니다.
나는 최근에 파이썬 세계에서 또 다른 보석인 peewee를 발견했습니다. 매우 가벼운 ORM으로 설정 후 사용이 정말 쉽고 빠릅니다. SQLAlchemy 또는 Django와 같은 큰 도구를 사용하는 것이 과도할 때 소규모 프로젝트 또는 독립 실행형 앱을 위한 하루를 만듭니다.
import peewee from peewee import * db = MySQLDatabase('jonhydb', user='john', passwd='megajonhy') class Book(peewee.Model): author = peewee.CharField() title = peewee.TextField() class Meta: database = db Book.create_table() book = Book(author="me", title='Peewee is cool') book.save() for book in Book.filter(author="me"): print book.title
이 예제는 기본적으로 작동합니다. peewee( pip install peewee
) 외에는 아무것도 필요하지 않습니다.
Community Wiki
다음은 Python 2만 지원하는 MySQLdb를 사용하여 수행하는 한 가지 방법입니다.
#!/usr/bin/python import MySQLdb # Connect db = MySQLdb.connect(host="localhost", user="appuser", passwd="", db="onco") cursor = db.cursor() # Execute SQL select statement cursor.execute("SELECT * FROM location") # Commit your changes if writing # In this case, we are only reading data # db.commit() # Get the number of rows in the resultset numrows = cursor.rowcount # Get and display one row at a time for x in range(0, numrows): row = cursor.fetchone() print row[0], "-->", row[1] # Close the connection db.close()
George Stocker
MySQLdb가 필요하지 않지만 라이브러리를 허용한다면 MySQL의 MySQL Connector/Python을 매우 강력히 추천합니다: http://dev.mysql.com/downloads/connector/python/ .
하나의 패키지(약 110k), 순수 Python이므로 시스템에 독립적이며 설치가 매우 간단합니다. 다운로드하고 두 번 클릭하고 사용권 계약을 확인하고 이동하기만 하면 됩니다. Xcode, MacPorts, 컴파일, 재시작이 필요하지 않습니다...
그런 다음 다음과 같이 연결합니다.
import mysql.connector cnx = mysql.connector.connect(user='scott', password='tiger', host='127.0.0.1', database='employees') try: cursor = cnx.cursor() cursor.execute(""" select 3 from your_table """) result = cursor.fetchall() print result finally: cnx.close()
Mr. Napik
Oracle(MySQL)은 이제 순수 Python 커넥터를 지원합니다. 즉, 바이너리를 설치할 필요가 없습니다. 단지 Python 라이브러리일 뿐입니다. "커넥터/파이썬"이라고 합니다.
http://dev.mysql.com/downloads/connector/python/
설치 후 여기에서 몇 가지 사용 예를 볼 수 있습니다.
Ken Brown
python에서 mysql에 액세스하기 위해 mysql 헤더를 설치하지 않으려면 MySQLDb 사용을 중지하십시오.
pymysql을 사용하십시오. MySQLDb가 하는 모든 작업을 수행하지만 외부 종속성 없이 순수하게 Python으로 구현되었습니다. 이를 통해 모든 운영 체제에서 설치 프로세스를 일관되고 쉽게 수행할 수 있습니다. pymysql
은 MySQLDb 및 IMHO를 대체하는 드롭다운입니다. MySQLDb를 어떤 용도로든 사용할 이유가 없습니다... 이제까지! - PTSD from installing MySQLDb on Mac OSX and *Nix systems
. 하지만 그건 저에게만 해당됩니다.
설치
pip install pymysql
그게 다야... 당신은 게임을 할 준비가 되었습니다.
pymysql Github repo의 사용 예
import pymysql.cursors import pymysql # Connect to the database connection = pymysql.connect(host='localhost', user='user', password='passwd', db='db', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) try: with connection.cursor() as cursor: # Create a new record sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)" cursor.execute(sql, ('webmaster@python.org', 'very-secret')) # connection is not autocommit by default. So you must commit to save # your changes. connection.commit() with connection.cursor() as cursor: # Read a single record sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s" cursor.execute(sql, ('webmaster@python.org',)) result = cursor.fetchone() print(result) finally: connection.close()
또한 - 기존 코드에서 MySQLdb를 빠르고 투명하게 교체
MySQLdb를 사용하는 기존 코드가 있는 경우 이 간단한 프로세스를 사용하여 pymysql로 쉽게 바꿀 수 있습니다.
# import MySQLdb << Remove this line and replace with: import pymysql pymysql.install_as_MySQLdb()
MySQLdb에 대한 모든 후속 참조는 pymysql을 투명하게 사용합니다.
OkezieE
MySQLdb를 사용해보십시오. MySQLdb는 Python 2만 지원합니다.
여기에 페이지 방법이 있습니다: http://www.kitebird.com/articles/pydbapi.html
페이지에서:
# server_version.py - retrieve and display database server version import MySQLdb conn = MySQLdb.connect (host = "localhost", user = "testuser", passwd = "testpass", db = "test") cursor = conn.cursor () cursor.execute ("SELECT VERSION()") row = cursor.fetchone () print "server version:", row[0] cursor.close () conn.close ()
Hortitude
최신 버전의 Python(>=3.6)
mysqlclient 또는 pymysql ( 권장 )을 사용하십시오.
이전 버전의 Python(<3.7, 2.4 >= Python <= 2.7)의 경우
이전 버전의 Python에서 작업하는 경우( 불행히도 ) -> oursql을 시도할 수도 있습니다.
그러나 프로젝트는 더 이상 유지 관리되지 않으며 버그 수정도 푸시되지 않습니다.
db 드라이버로 oursql 도 있습니다. oursql이 더 나은 이유를 설명하는 링크에 나열된 몇 가지 이유:
- oursql에는 실제 매개변수화 기능이 있어 SQL과 데이터를 MySQL에 완전히 별도로 전송합니다.
- oursql을 사용하면 모든 것을 클라이언트에서 버퍼링할 필요 없이 텍스트 또는 이진 데이터를 데이터베이스로 스트리밍하고 데이터베이스에서 스트리밍할 수 있습니다.
- oursql은 느리게 행을 삽입하고 행을 느리게 가져올 수 있습니다.
- oursql은 기본적으로 유니코드를 지원합니다.
- oursql은 2.6+(PEP 218 참조)에서 사용 중단 경고 없이 그리고 2.7(PEP 328 참조)에서 완전히 실패하지 않고 python 2.4에서 2.7을 지원합니다.
- oursql은 python 3.x에서 기본적으로 실행됩니다.
그러면 mysql에 oursql로 연결하는 방법은 무엇입니까?
mysqldb와 매우 유사:
import oursql db_connection = oursql.connect(host='127.0.0.1',user='foo',passwd='foobar',db='db_name') cur=db_connection.cursor() cur.execute("SELECT * FROM `tbl_name`") for row in cur.fetchall(): print row[0]
설명서 의 자습서는 꽤 괜찮습니다.
물론 ORM의 경우 SQLAlchemy는 다른 답변에서 이미 언급했듯이 좋은 선택입니다.
bool.dev
터미널에서 다음 명령을 실행하여 mysql 커넥터를 설치하십시오.
pip install mysql-connector-python
그리고 이것을 파이썬 편집기에서 실행하여 MySQL에 연결하십시오.
import mysql.connector mydb = mysql.connector.connect( host="localhost", user="yusername", passwd="password", database="database_name" )
MySQL 명령을 실행하기 위한 샘플(python 편집기에서):
mycursor = mydb.cursor() mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))") mycursor.execute("SHOW TABLES") mycursor.execute("INSERT INTO customers (name, address) VALUES ('John', 'Highway 21')") mydb.commit() # Use this command after insert or update
추가 명령: https://www.w3schools.com/python/python_mysql_getstarted.asp
Scott
SQLAlchemy
SQLAlchemy는 애플리케이션 개발자에게 SQL의 모든 기능과 유연성을 제공하는 Python SQL 툴킷 및 객체 관계형 매퍼입니다. SQLAlchemy는 효율적이고 고성능인 데이터베이스 액세스를 위해 설계된 잘 알려진 엔터프라이즈 수준 지속성 패턴의 전체 제품군을 제공하며 단순하고 Pythonic한 도메인 언어에 적용됩니다.
설치
pip install sqlalchemy
원시 쿼리
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, scoped_session engine = create_engine("mysql://<user_name>:<password>@<host_name>/<db_name>") session_obj = sessionmaker(bind=engine) session = scoped_session(session_obj) # insert into database session.execute("insert into person values(2, 'random_name')") session.flush() session.commit()
ORM 방식
from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker, scoped_session Base = declarative_base() engine = create_engine("mysql://<user_name>:<password>@<host_name>/<db_name>") session_obj = sessionmaker(bind=engine) session = scoped_session(session_obj) # Bind the engine to the metadata of the Base class so that the # declaratives can be accessed through a DBSession instance Base.metadata.bind = engine class Person(Base): __tablename__ = 'person' # Here we define columns for the table person # Notice that each column is also a normal Python instance attribute. id = Column(Integer, primary_key=True) name = Column(String(250), nullable=False) # insert into database person_obj = Person(id=12, name="name") session.add(person_obj) session.flush() session.commit()
Anand Tripathi
위의 모든 답변에도 불구하고 특정 데이터베이스에 미리 연결하고 싶지 않은 경우, 예를 들어 데이터베이스를 계속 생성(!)하려는 경우 다음과 같이 connection.select_db(database)
import pymysql.cursors connection = pymysql.connect(host='localhost', user='mahdi', password='mahdi', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) cursor = connection.cursor() cursor.execute("CREATE DATABASE IF NOT EXISTS "+database) connection.select_db(database) sql_create = "CREATE TABLE IF NOT EXISTS "+tablename+(timestamp DATETIME NOT NULL PRIMARY KEY)" cursor.execute(sql_create) connection.commit() cursor.close()
Mahdi
python에서 MySQL에 연결하는 가장 좋은 방법은 MySQL Connector/Python을 사용하는 것입니다. 이는 Python 작업을 위한 MySQL용 공식 Oracle 드라이버이고 Python 3 및 Python 2에서 모두 작동하기 때문입니다.
MySQL에 연결하려면 아래에 언급된 단계를 따르십시오.
pip를 사용하여 커넥터 설치
pip install mysql-connector-python
또는 https://dev.mysql.com/downloads/connector/python/ 에서 설치 프로그램을 다운로드할 수 있습니다.
connect()
메서드를 사용하여 MySQL에 연결합니다connect()
메서드에 필요한 인수를 전달합니다. 즉, 호스트, 사용자 이름, 암호 및 데이터베이스 이름입니다.SQL 쿼리를 실행하기 위해
connect()
메서드에서 반환된cursor
개체를 만듭니다.작업이 완료된 후 연결을 닫습니다.
예 :
import mysql.connector from mysql.connector import Error try: conn = mysql.connector.connect(host='hostname', database='db', user='root', password='passcode') if conn.is_connected(): cursor = conn.cursor() cursor.execute("select database();") record = cursor.fetchall() print ("You're connected to - ", record) except Error as e : print ("Print your error msg", e) finally: #closing database connection. if(conn.is_connected()): cursor.close() conn.close()
참조 - https://pynative.com/python-mysql-database-connection/
MySQL 커넥터 Python의 중요한 API
DML 작업의 경우 -
cursor.execute()
및cursor.executemany()
를 사용하여 쿼리를 실행합니다. 이 후 DB에 대한 변경 사항을 유지connection.commit()
데이터를 가져오려면 -
cursor.execute()
를 사용하여 쿼리를 실행하고cursor.fetchall()
,cursor.fetchone()
,cursor.fetchmany(SIZE)
를 사용하여 데이터를 가져옵니다.
Vishal Hule
당신 중 일부는 이것을 중복으로 표시하고 내가 다른 사람의 답변을 복사하고 있다는 사실에 화를 낼 수 있지만, 나는 Napik 씨의 답변의 한 측면을 정말로 강조하고 싶습니다. 이걸 놓쳐서 전국 홈페이지 다운타임(9분)을 일으켰습니다. 누군가 이 정보를 공유했다면 막을 수 있었을 거에요!
그의 코드는 다음과 같습니다.
import mysql.connector cnx = mysql.connector.connect(user='scott', password='tiger', host='127.0.0.1', database='employees') try: cursor = cnx.cursor() cursor.execute("""select 3 from your_table""") result = cursor.fetchall() print(result) finally: cnx.close()
여기서 중요한 것은 Try 및 finally 절입니다. 이렇게 하면 코드의 cursor/sqlstatement 부분에서 어떤 일이 발생하는지에 관계없이 항상 닫혀 있는 연결이 허용됩니다. 활성 연결이 많으면 DBLoadNoCPU가 급증하고 db 서버가 충돌할 수 있습니다.
이 경고가 서버와 궁극적으로 작업을 저장하는 데 도움이 되기를 바랍니다! :NS
Tanner Clark
MySQLdb 는 간단한 방법입니다. 연결을 통해 SQL 쿼리를 실행할 수 있습니다. 기간.
Pythonic이기도 한 내가 선호하는 방법은 대신 강력한 SQLAlchemy 를 사용하는 것입니다. 여기 쿼리 관련 튜토리얼이 있고 SQLALchemy의 ORM 기능 에 대한 튜토리얼이 있습니다.
muhuk
Python3.6의 경우 pymysql과 mysqlclient의 두 가지 드라이버를 찾았습니다. 나는 그들 사이의 성능을 테스트했고 결과를 얻었습니다. mysqlclient가 더 빠릅니다.
아래는 내 테스트 프로세스입니다(시간 경과를 분석하려면 python lib profilehooks를 설치해야 합니다.:
원시 SQL: select * from FOO;
mysql 터미널에서 즉시 실행: 46410 rows in set (0.10 sec)
pymysql(2.4s):
from profilehooks import profile import pymysql.cursors import pymysql connection = pymysql.connect(host='localhost', user='root', db='foo') c = connection.cursor() @profile(immediate=True) def read_by_pymysql(): c.execute("select * from FOO;") res = c.fetchall() read_by_pymysql()
mysql클라이언트(0.4초)
from profilehooks import profile import MySQLdb connection = MySQLdb.connect(host='localhost', user='root', db='foo') c = connection.cursor() @profile(immediate=True) def read_by_mysqlclient(): c.execute("select * from FOO;") res = c.fetchall() read_by_mysqlclient()
따라서 mysqlclient가 pymysql보다 훨씬 빠른 것 같습니다.
kai
위의 답변을 수정하면 됩니다. 이 명령을 실행하여 Python용 mysql을 설치하기만 하면 됩니다.
sudo yum install MySQL-python sudo apt-get install MySQL-python
기억하다! 대소문자를 구분합니다.
Hafiz Muhammad Shafiq
다른 사람들은 특정 버전의 python만 지원하므로 mysqlclient가 최고입니다.
pip install mysqlclient
예제 코드
import mysql.connector import _mysql db=_mysql.connect("127.0.0.1","root","umer","sys") #db=_mysql.connect(host,user,password,db) # Example of how to insert new values: db.query("""INSERT INTO table1 VALUES ('01', 'myname')""") db.store_result() db.query("SELECT * FROM new1.table1 ;") #new1 is scheme table1 is table mysql res= db.store_result() for i in range(res.num_rows()): print(result.fetch_row())
Umer
또한 Storm을 살펴보십시오. 쿼리를 작성하지 않고도 SQL 항목을 쉽게 편집하고 생성할 수 있는 간단한 SQL 매핑 도구입니다.
다음은 간단한 예입니다.
from storm.locals import * # User will be the mapped object; you have to create the table before mapping it class User(object): __storm_table__ = "user" # table name ID = Int(primary=True) #field ID name= Unicode() # field name database = create_database("mysql://root:password@localhost:3306/databaseName") store = Store(database) user = User() user.name = u"Mark" print str(user.ID) # None store.add(user) store.flush() # ID is AUTO_INCREMENT print str(user.ID) # 1 (ID) store.commit() # commit all changes to the database
찾기 및 개체 사용:
michael = store.find(User, User.name == u"Michael").one() print str(user.ID) # 10
기본 키로 찾기:
print store.get(User, 1).name #Mark
자세한 내용은 자습서를 참조하십시오.
michip96
이것은 MySQL DB 연결입니다.
from flask import Flask, render_template, request from flask_mysqldb import MySQL app = Flask(__name__) app.config['MYSQL_HOST'] = 'localhost' app.config['MYSQL_USER'] = 'root' app.config['MYSQL_PASSWORD'] = 'root' app.config['MYSQL_DB'] = 'MyDB' mysql = MySQL(app) @app.route('/', methods=['GET', 'POST']) def index(): if request.method == "POST": details = request.form cur = mysql.connection.cursor() cur.execute ("_Your query_") mysql.connection.commit() cur.close() return 'success' return render_template('index.html') if __name__ == '__main__': app.run()
Aditya
이런 식으로 파이썬 코드를 mysql에 연결할 수 있습니다.
import MySQLdb db = MySQLdb.connect(host="localhost", user="appuser", passwd="", db="onco") cursor = db.cursor()
Haider Ali
PyMySQL 0.10.1
- 출시: 2020년 9월 10일, python3도 지원합니다.
python3 -m pip install PyMySQL
간단한 코드:
import pymysql # Connect to the database conn = pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='fax') # Create a Cursor object cur = conn.cursor() # Execute the query cur.execute("SELECT * FROM fax.student") # Read and print records for row in cur.fetchall(): print(row)
산출:
(1, 'Petar', 'Petrovic', 1813, 'Njegusi') (2, 'Donald', 'Tramp', 1946, 'New York') (3, 'Bill', 'Gates', 1955, 'Seattle')
Milovan Tomašević
파이썬 3.3의 경우
CyMySQL https://github.com/nakagami/CyMySQL
내 Windows 7에 pip가 설치되어 있습니다. pip install cymysql
(당신은 cython이 필요하지 않습니다) 빠르고 고통스럽지 않습니다
Lazik
먼저 드라이버를 설치
pip install MySQL-python
그러면 기본 코드는 다음과 같습니다.
#!/usr/bin/python import MySQLdb try: db = MySQLdb.connect(host="localhost", # db server, can be a remote one db="mydb" # database user="mydb", # username passwd="mydb123", # password for this username ) # Create a Cursor object cur = db.cursor() # Create a query string. It can contain variables query_string = "SELECT * FROM MY_TABLE" # Execute the query cur.execute(query_string) # Get all the rows present the database for each_row in cur.fetchall(): print each_row # Close the connection db.close() except Exception, e: print 'Error ', e
Vishvajit Pathak
먼저 드라이버(Ubuntu)를 설치합니다.
sudo apt-get 설치 python-pip
sudo pip install -U pip
sudo apt-get 설치 python-dev libmysqlclient-dev
sudo apt-get MySQL-python 설치
MySQL 데이터베이스 연결 코드
import MySQLdb conn = MySQLdb.connect (host = "localhost",user = "root",passwd = "pass",db = "dbname") cursor = conn.cursor () cursor.execute ("SELECT VERSION()") row = cursor.fetchone () print "server version:", row[0] cursor.close () conn.close ()
Hasib Kamal
라이브러리를 얻는 첫 번째 단계: 터미널을 열고 pip install mysql-python-connector
합니다. 설치 후 두 번째 단계로 이동합니다.
라이브러리를 가져오는 두 번째 단계: Python 파일을 열고 다음 코드를 작성합니다. import mysql.connector
서버에 연결하는 세 번째 단계: 다음 코드를 작성합니다.
conn = mysql.connector.connect(host=
you host name like localhost or 127.0.0.1
, username=your username like root
, password =your password
)
세 번째 단계 커서 만들기: 커서를 만들면 쿼리를 쉽게 실행할 수 있습니다. 커서를 만들려면 다음 코드를 사용하십시오. cursor = conn.cursor()
쿼리 실행: 쿼리를 실행하기 위해 다음을 수행할 수 있습니다. cursor.execute(query)
쿼리가 테이블의 내용을 변경하는 경우 쿼리 실행 후 다음 코드를 추가해야 합니다. conn.commit()
쿼리에서 값 가져오기: 쿼리에서 값을 가져오려면 다음을 수행할 수 있습니다. cursor.excecute('SELECT * FROM
table_name ') for i in cursor: print(i) #Or for i in cursor.fetchall(): print(i)
fetchall() 메서드는 요청한 값을 포함하는 많은 튜플이 있는 목록을 행 다음에 반환합니다.
연결 닫기: 연결을 닫으려면 다음 코드를 사용해야 합니다. conn.close()
예외 처리 : 헨델 예외는 밟아 다음과 같은 방법을 할 수있는 try: #Logic pass except mysql.connector.errors.Error: #Logic pass
당신이를 저장하는 시스템을 만드는 계정입니다 예를 들어 데이터베이스를 사용하려면 blabla라는 이름의 데이터베이스에 데이터가 있는 경우 connect() 메서드에 데이터베이스 매개변수를 추가하면 됩니다.
mysql.connector.connect(database =
데이터베이스 이름 )
호스트, 사용자 이름, 비밀번호와 같은 다른 정보를 제거하지 마십시오.
Code GUI
데이터베이스에서 일부 데이터를 플롯하려는 경우 또 다른 옵션은 Jupyter 커널 을 사용하는 것입니다. 이는 MariaDB용으로 설계되었지만 MySQL에서도 쉽게 작동해야 합니다.
robert
먼저 https://dev.mysql.com/downloads/connector/python/ 에서 python-mysql 커넥터를 설치합니다.
Python 콘솔에서 다음을 입력하십시오.
pip install mysql-connector-python-rf import mysql.connector
Aditya Agrawal
출처 : http:www.stackoverflow.com/questions/372885/how-do-i-connect-to-a-mysql-database-in-python