2

Python と MySQL の間の素晴らしくシンプルなインターフェースはありますか? MySQLdb モジュール、SQLAlchemy、および MySQL が提供するモジュールを見てきました。それらは機能しますが、扱いにくく、すばやく操作するのが難しいだけです。私は Python を初めて使用しますが、MATLAB でこれを行ったことがあり、非常に簡単なインターフェイスを備えています。IE

Python でクエリを実行するたびに、次のようなことをしなければならないようです。

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 では、接続を 1 回開始します(プログラムを起動するときなど)。

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

クエリを実行するたびにカーソルや接続を作成する必要はなく、単純な I/O クエリ実行プログラムとデータ リターナーだけです。私はデータベースで遊ぶのが好きで、多くのクロスプラットフォーム プロジェクトを持っています。MATLAB のデータに即座に接続して表示できることは、すばらしい機能です。これを行うための Python ブリッジはありますか?

4

3 に答える 3

4

パンダを使用。それは素晴らしいインターフェースを持っています。ここを見て:

python-pandas と mysql のようなデータベース

これを使用して、Python からすべてのデータベースにアクセスします。

于 2012-10-25T02:57:35.917 に答える
3

SqlSoupと呼ばれる SQLAlchemy 拡張機能があり、ほとんどのセットアップが不要になります。

from sqlalchemy.ext.sqlsoup import SqlSoup
db = SqlSoup('mysql://scott:mypassword@localhost/employees')

次に、SQL クエリを実行するには、SqlSoup ドキュメントのraw 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

または、結果が 1 つだけ必要な場合は、同じdb.execute呼び出しを使用して、次のようにします。

name, email = rp.fetchone()

また、 SQL を記述する代わりにクエリ構文など、SQLAlchemy の機能を使用することもできます。

于 2012-10-08T03:57:55.187 に答える
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 では、これらのパラメーターもどこかに保存する必要があります。

usernameおよびを追加のパラメーターとして引き出すこともできdatabaseますが、接続プールなどを制御できるという利点がなくても、同じレベルの複雑さに戻ることになります。

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()

ああ、今ではこの関数には何の根性もありません。コードのすべてのパラメトリック部分は呼び出し元にプッシュバックされています。

于 2012-10-08T03:53:36.797 に答える