如何使用python程序连接MySQL数据库?
当前回答
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
其他回答
如果你想避免安装mysql头文件只是为了从python访问mysql,请停止使用MySQLDb。
使用pymysql。它做了MySQLDb做的所有事情,但是它完全是用Python实现的,没有外部依赖。这使得在所有操作系统上的安装过程一致且简单。pymysql是MySQLDb的替代品,在我看来,没有任何理由使用MySQLDb做任何事情…!-在Mac OSX和*Nix系统上安装MySQLDb的PTSD,但这只是我的想法。
安装
安装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。
用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)即可。
从python连接到MySQL的最佳方法是使用MySQL连接器/ python,因为它是MySQL的官方Oracle驱动程序,用于与python一起工作,并且它可以与python 3和python 2一起工作。
按照下面提到的步骤连接MySQL
使用PIP安装连接器 PIP安装mysql-connector-python
或者您可以从https://dev.mysql.com/downloads/connector/python/下载安装程序
使用mysql connector python的connect()方法连接mysql。将所需的参数传递给connect()方法。即主机、用户名、密码和数据库名。 从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连接器Python的重要API
对于DML操作-使用cursor.execute()和cursor.executemany()来运行查询。在此之后,使用connection.commit()将您的更改保存到DB 获取数据—使用cursor.execute()运行查询,使用cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE)获取数据
尽管有以上所有答案,如果您不想预先连接到特定的数据库,例如,如果您仍然想创建数据库(!),您可以使用connection.select_db(数据库),如下所示。
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()
Python没有内置的库来与MySQL交互,所以为了在MySQL数据库和Python之间建立连接,我们需要为我们的Python环境安装MySQL驱动程序或模块。
pip install mysql-connector-python
MySQL - connector - 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教程,介绍了如何使用Python连接MySQL数据库和创建表。想要了解更多,请点击这里。
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 如何关闭mysql密码验证?
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- MySQL区分大小写查询
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- MySQL数据库表中的最大记录数