簡體   English   中英

簡單的Python-MySQL橋?

[英]Simple Python-MySQL Bridge?

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中,我啟動連接一次(比如啟動程序時,然后檢索某些東西就像( 從這里 )一樣簡單:

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

每次查詢時都沒有游標和連接,只需一個簡單的I / O查詢執行器和數據返回器。 我喜歡玩數據庫,有很多跨平台的項目。 能夠在MATLAB中即時連接和查看數據是一個很棒的功能。 有沒有Python橋來做到這一點?

使用熊貓。 它有一個很棒的界面。 看這里:

python-pandas和mysql這樣的數據庫

我用它來從python訪問我的所有數據庫。

有一個名為SqlSoup的SQLAlchemy擴展,它不需要大多數設置:

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

然后運行SQL查詢,請參閱SqlSoup文檔的原始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調用,然后:

name, email = rp.fetchone()

您還可以使用SQLAlchemy的功能,例如查詢語法而不是編寫SQL。

當然,你可以寫一個像這樣的發電機

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

啊,現在對這個功能沒有任何膽量,代碼的所有參數部分都被推回到調用者

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM