2012-10-08 5 views
2

파이썬과 MySQL 사이에 멋지고 간단한 인터페이스가 있습니까? MySQLdb 모듈, SQLAlchemy 및 MySQL에서 제공하는 모듈을 살펴 보았습니다. 그들은 작동하지만, 빠르고 clunky하고 빠르게 작업하기가 어렵습니다. 필자는 Python을 처음 접했지만 MATLAB에서이 작업을 수행했으며 매우 쉬운 인터페이스를 가지고 있습니다. I.E.간단한 파이썬 -MySQL 브리지?

당신이 뭔가를해야 할 것 같다 파이썬에서 쿼리를 수행 할 때마다 :

import datetime 
import mysql.connector 
cnx = mysql.connector.connect(user='scott', database='employees') 
cursor = cnx.cursor() 
query = ("SELECT first_name, last_name, hire_date FROM employees " 
    "WHERE hire_date BETWEEN %s AND %s") 
hire_start = datetime.date(1999, 1, 1) 
hire_end = datetime.date(1999, 12, 31) 
cursor.execute(query, (hire_start, hire_end)) 
for (first_name, last_name, hire_date) in cursor: 
print("{}, {} was hired on {:%d %b %Y}".format(
last_name, first_name, hire_date)) 
cursor.close() 
cnx.close() 

MATLAB에, 나는 그 프로그램을 시작하고, 때처럼 (한 번 연결을 시작하는 반면 뭔가를 검색하는 것은 (from here)로 간단합니다. 그냥 간단한 I/O 쿼리 실행 부 및 데이터 기 returner 내가 데이터베이스와 함께 연주 좋아하고 많은 크로스를

[Fn,Ln,Hd] = mysql(['SELECT first_name, last_name, hire_date FROM employees WHERE hire_date = ',num2str(some_date)]) 

없음 커서와 연결하면 조회 할 때마다하지 않습니다하기 플랫폼 프로젝트. 개개인이 MATLAB에서 데이터에 연결하고 데이터를 살펴 보는 것은 대단한 특징입니다. 이 작업을 수행 할 파이썬 브리지가 있습니까?

+4

당신은 여전히 ​​* 어딘가에 MySQL 데이터베이스 *에 대한 연결 정보를 제공해야합니다. – Amber

답변

5

팬더를 사용하십시오. 그것은 훌륭한 인터페이스를 가지고 있습니다. 여기 봐 :

python-pandas and databases like mysql

나는 파이썬에서 내 모든 데이터베이스에 액세스하는 데 사용합니다.

2

물론, 당신은 함수에 하드 코딩되어이

import datetime 
import mysql.connector 

def do_mysql(query, *args): 
    cnx = mysql.connector.connect(user='scott', database='employees') 
    cursor = cnx.cursor() 
    cursor.execute(query, args) 
    for result in cursor: 
     yield result 
    cursor.close() 
    cnx.close() 

하지만 지금은 usernamedatabase 같은 발전기를 작성할 수 있습니다. MATLAB은 이러한 매개 변수를 어딘가에 저장해야합니다.

당신은 usernamedatabase 아웃 등의 추가 매개 변수를 당길 수 있지만, 당신은 복잡성을 같은 수준으로 다시 향하고있다 - 연결 풀링을 제어 할 수 있다는 장점이없는 등

def do_mysql(user, database, query, *args): 
    cnx = mysql.connector.connect(user=user, database=database) 
    cursor = cnx.cursor() 
    cursor.execute(query, args) 
    for result in cursor: 
     yield result 
    cursor.close() 
    cnx.close() 

그래서 우리는 데이터베이스 쿼리를 많이 처리하는 프로그램에서 필요로하는 성능을 얻기 위해, 우리는 적어도

def do_mysql(cnx, query, *args): 
    cursor = cnx.cursor() 
    cursor.execute(query, args) 
    for result in cursor: 
     yield result 
    cursor.close() 

아에서 연결을 통과해야합니다, 지금은 정말이 기능과 모든에 대한 용기가 아니다 코드의 파라 메트릭 부품 발신자

+0

+1 복잡성을 직접 추출하는 방법을 설명합니다. 감사! 나는 다른 대답이 나오지 않는다면 하루나 이틀 후에 그것을 체크 할 것입니다. –

3

설정의 대부분에 대한 필요성을 제거 SqlSoup를라는 SQLAlchemy의 확장있다 밖으로 밀려되었습니다

from sqlalchemy.ext.sqlsoup import SqlSoup 
db = SqlSoup('mysql://scott:[email protected]/employees') 

는 그런 다음 SQL 쿼리를 실행할 수는,을 참조하십시오

rp = db.execute('select name, email from users where name like :name order by name', name='%Bhargan%') 
for name, email in rp.fetchall(): 
    print name, email 

아니면 하나 개의 결과를 원하는 경우, 다음 같은 db.execute 전화 사용 :

을 SqlSoup 워드 프로세서의 raw SQL section

SQL을 작성하는 대신 query syntax과 같은 SQLAlchemy 기능을 사용할 수도 있습니다.

+0

sqlsoup에 대해 알고 있었으므로 +1 –

+0

절대 들어 본 적이 없으니 확인해 보겠습니다. 매우 감사! –