如何使用python程序连接MySQL数据库?


当前回答

首先安装驱动程序(Ubuntu)

Sudo apt-get install python-pip sudo pip install -U pip Sudo apt-get install python-dev libmysqlclient-dev sudo apt-get install 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 ()

其他回答

MySQLdb是最直接的方法。您可以在连接上执行SQL查询。时期。

我更喜欢使用强大的SQLAlchemy,这也是python化的。下面是一个与查询相关的教程,下面是一个关于SQLALchemy的ORM功能的教程。

对于Python3.6,我找到了两个驱动程序:pymysql和mysqlclient。我测试了它们之间的性能,得到的结果是:mysqlclient更快。

下面是我的测试过程(需要安装python lib profilehooks来分析时间流逝:

select * from FOO;

立即在mysql终端执行: set中有46410行(0.10秒)

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

下面是pymysql的配置文件:

mysqlclient 0.4s)

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的配置文件:

因此,mysqlclient似乎比pymysql快得多

对于较新版本的Python (>=3.6)

使用mysqlclient或pymysql(推荐)。

对于较旧版本的Python (<3.7, 2.4 <= Python <= 2.7)

如果您正在使用较旧版本的Python(不幸的是),那么您也可以尝试-> oursql。

但是请注意,该项目不再维护,错误修复也不会推送。


作为一个db驱动程序,还有oursql。这个链接列出了一些原因,说明了为什么oursql更好:

oursql有真正的参数化,将SQL和数据完全分开发送到MySQL。

Oursql允许文本或二进制数据流进数据库和流出数据库,而不是要求所有内容都缓冲在客户端。 Oursql既可以惰性地插入行,也可以惰性地获取行。 Oursql默认支持unicode。 oursql支持python 2.4到2.7,在2.6+上没有任何弃用警告(见PEP 218),在2.7上也没有完全失败(见PEP 328)。 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是一个很好的选择,正如已经在其他答案中提到的那样。

对于python 3.3

CyMySQL https://github.com/nakagami/CyMySQL

我在windows 7上安装了pip,只是 安装cymysql

(你不需要cython) 快速无痛

这里有一种方法,使用MySQLdb,它只支持Python 2:

#!/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()

参考这里