如何在 Python 中连接到 MySQL 数据库?
- 2024-11-28 08:37:00
- admin 原创
- 9
问题描述:
如何使用 Python 程序连接到 MySQL 数据库?
解决方案 1:
三步用 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。
我强烈建议您使用它:您的生活将会变得更加轻松。
我最近在 Python 世界中发现了另一颗明珠: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
) 之外,没有其他要求。
解决方案 2:
以下是使用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()
参考这里
解决方案 3:
如果您不需要 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()
解决方案 4:
Oracle (MySQL) 现在支持纯 Python 连接器。这意味着无需安装二进制文件:它只是一个 Python 库。它被称为“Connector/Python”。
http://dev.mysql.com/downloads/connector/python/
安装后,你可以在这里看到一些使用示例
解决方案 5:
如果您想避免安装 mysql 标头以便从 python 访问 mysql,请停止使用 MySQLDb。
使用pymysql。它能完成 MySQLDb 的所有功能,但它是纯 Python 实现的,没有外部依赖项。这使得所有操作系统上的安装过程一致且简单。 pymysql
是 MySQLDb 的替代品,恕我直言,没有理由将 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。
解决方案 6:
尝试使用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 ()
解决方案 7:
在终端中运行此命令来安装 mysql 连接器:
pip install mysql-connector-python
并在 Python 编辑器中运行此命令以连接到 MySQL:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="username",
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, update, delete commands
更多命令: https: //www.w3schools.com/python/python_mysql_getstarted.asp
解决方案 8:
对于较新版本的 Python (>=3.6)
使用mysqlclient或pymysql(推荐)。
对于旧版本的 Python (<3.7, 2.4 <= Python <= 2.7)
如果您正在使用旧版本的 Python(不幸的是),那么您也可以尝试 -> oursql。
但请注意,该项目不再维护,并且也不会推送错误修复。
作为数据库驱动程序,还有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 上本地运行。
那么如何使用oursql连接mysql呢?
与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 是一个不错的选择,正如其他答案中提到的那样。
解决方案 9:
sqlalchemy
SQLAlchemy 是 Python SQL 工具包和对象关系映射器,它为应用程序开发人员提供了 SQL 的全部功能和灵活性。SQLAlchemy 提供了一整套众所周知的企业级持久性模式,旨在实现高效、高性能的数据库访问,并改编为一种简单且 Pythonic 的域语言。
安装
pip install sqlalchemy
RAW 查询
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()
解决方案 10:
从 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 连接器 python 的方法连接到 MySQL。将所需的参数传递给connect()
方法。即主机、用户名、密码和数据库名称。cursor
从方法返回的连接对象创建对象connect()
来执行 SQL 查询。工作完成后关闭连接。
例子:
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 Connector Python 的重要 API
对于 DML 操作 - 使用
cursor.execute()
和cursor.executemany()
运行查询。然后使用connection.commit()
将更改保存到 DB获取数据 - 使用
cursor.execute()
运行查询cursor.fetchall()
,然后cursor.fetchone()
,cursor.fetchmany(SIZE)
获取数据
解决方案 11:
尽管有上述所有答案,但如果您不想预先连接到特定的数据库,例如,如果您仍然想创建数据库(!),您可以使用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()
解决方案 12:
尽管你们中的一些人可能会将此标记为重复并对我抄袭他人的答案感到不满,但我真的想强调一下 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子句。这允许始终关闭连接,无论代码的游标/sqlstatement 部分发生什么。大量活动连接会导致 DBLoadNoCPU 激增,并可能导致数据库服务器崩溃。
我希望这个警告有助于拯救服务器并最终挽救工作!:D
解决方案 13:
MySQLdb是一种直接的方法。您可以通过连接执行 SQL 查询。就这样。
我更喜欢的方式,也是 Python 风格的,是使用强大的SQLAlchemy。这里有一个查询相关的教程,这里有一个关于SQLALchemy 的ORM 功能的教程。
解决方案 14:
对于 Python3.6,我找到了两个驱动程序:pymysql 和 mysqlclient。我测试了它们之间的性能,结果显示:mysqlclient 速度更快。
以下是我的测试过程(需要安装python库profilehooks来分析时间流逝:
原始 SQL:select * from FOO;
立即在mysql终端中执行:46410 rows in set (0.10 sec)
pymysql (2.4秒):
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.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 配置文件:
因此,mysqlclient 似乎比 pymysql 快得多
解决方案 15:
只是对上述答案进行了修改。只需运行此命令即可为 python 安装 mysql
sudo yum install MySQL-python
sudo apt-get install MySQL-python
记住!区分大小写。
解决方案 16:
mysqlclient 是最好的,因为其他的只支持特定版本的 python
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())
请参阅https://github.com/PyMySQL/mysqlclient-python
解决方案 17:
还可以看看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
欲了解更多信息,请参阅教程。
解决方案 18:
这是 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()
解决方案 19:
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')
解决方案 20:
您可以通过这种方式将您的 python 代码连接到 mysql。
import MySQLdb
db = MySQLdb.connect(host="localhost",
user="appuser",
passwd="",
db="onco")
cursor = db.cursor()
解决方案 21:
获取库的第一步:打开终端并执行pip install mysql-python-connector
。安装完成后进入第二步。
导入库的第二步:打开你的 python 文件并写入以下代码:import mysql.connector
第三步,连接服务器:写入以下代码:
conn = mysql.connector.connect(主机名=
you host name like localhost or 127.0.0.1
,用户名=your username like root
,密码=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 =
数据库名称)
不要删除其他信息,如主机、用户名、密码。
解决方案 22:
Python 没有内置库来与 MySQL 交互,因此为了建立 MySQL 数据库和 Python 之间的连接,我们需要为我们的 Python 环境安装 MySQL 驱动程序或模块。
pip install mysql-connector-python
mysql-connecter-python 是一个开源 Python 库,只需几行代码即可将您的 Python 代码连接到 MySQL 数据库。并且它与最新版本的 Python 兼容性很好。
安装 mysql-connector-python 后,您可以使用以下代码片段连接到您的 MySQL 数据库。
import mysql.connector
Hostname = "localhost"
Username = "root"
Password ="admin" #enter your MySQL password
#set connection
set_db_conn = mysql.connector.connect(host= Hostname, user=Username, password=Password)
if set_db_conn:
print("The Connection between has been set and the Connection ID is:")
#show connection id
print(set_db_conn.connection_id)
连接 Django 和 MySQL
在 Django 中,要将您的模型或项目连接到 MySQL 数据库,您需要安装 mysqlclient 库。
pip install mysqlclient
为了配置您的 Django 设置,以便您的项目可以连接到 MySQL 数据库,您可以使用以下设置。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_name',
'USER': 'username',
'PASSWORD': 'databasepassword@123',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
我在博客上写了一篇专门的 Python 教程,介绍了如何连接到 MySQL 数据库并使用 Python 创建表。要了解更多信息,请单击此处。
解决方案 23:
对于 Python 3.3
CyMySQL
https://github.com/nakagami/CyMySQL
我的 Windows 7 上安装了 pip,只需 pip install cymysql
(你不需要 cython)快速而轻松
解决方案 24:
首先安装驱动程序
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
解决方案 25:
首先安装驱动程序(Ubuntu)
sudo apt-get 安装 python-pip
sudo pip 安装-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 ()
解决方案 26:
您可以在 Python 中使用 mysql 客户端,例如 PyMySQL。
解决方案 27:
首先,从https://dev.mysql.com/downloads/connector/python/安装 python-mysql 连接器
在 Python 控制台上输入:
pip install mysql-connector-python-rf
import mysql.connector
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件