介绍Python访问MySQL
MySQL是一个非常流行的开源数据库管理系统,它支持多种编程语言的的API。对于Python而言,有许多不同的API可以用来访问MySQL。在本文中,我们将介绍Python中访问MySQL的正确姿势。
使用Python中的MySQL Connector进行访问
MySQL Connector安装
MySQL Connector是Python中访问MySQL的官方API之一,通过它可以轻松地连接到MySQL服务器并执行SQL语句。在使用MySQL Connector之前,我们需要通过pip来安装这个API包:
pip install mysql-connector-python
安装成功后,我们就可以开始使用MySQL Connector来连接到MySQL服务器了。
MySQL服务器连接配置
在连接到MySQL服务器时,我们需要提供一些必要的信息,包括服务器的IP地址、用户名、密码和数据库名称等。MySQL Connector为我们提供了多种方式来配置这些信息。
首先,我们可以在代码中直接指定这些参数:
import mysql.connector
host = "localhost"
user = "root"
password = "123456"
database = "test"
cnx = mysql.connector.connect(host=host, user=user, password=password, database=database)
cursor = cnx.cursor()
在上面的代码中,我们通过host、user、password和database参数来指定MySQL服务器的位置、用户名、密码和要连接的数据库名称。这些参数是可选的,如果我们不指定它们,MySQL会使用默认值。
另一种配置方式是使用配置文件。下面是一个MySQL连接配置文件的例子:
[mysql]
host=localhost
user=root
password=123456
database=test
在上面的配置文件中,我们可以将MySQL服务器的相关配置信息写入指定的文件中,然后在代码中使用这个文件来连接到MySQL服务器:
import mysql.connector
config = {
'user': 'johndoe',
'password': 'secret',
'host': 'localhost',
'database': 'employees',
'raise_on_warnings': True,
}
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()
在上面的代码中,我们使用config字典来保存了MySQL服务器的相关配置信息,然后通过调用mysql.connector.connect()方法来连接到MySQL服务器。
执行SQL查询
连接到MySQL服务器后,我们就可以执行SQL查询了。下面是一个Python程序,它连接到MySQL服务器并执行一个查询:
import mysql.connector
config = {
'user': 'johndoe',
'password': 'secret',
'host': 'localhost',
'database': 'employees',
'raise_on_warnings': True,
}
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()
query = ("SELECT first_name, last_name, hire_date FROM employees "
"WHERE hire_date BETWEEN %s AND %s")
hire_start = '1999-01-01'
hire_end = '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))
cnx.close()
在上面的代码中,我们使用MySQL Connector连接到MySQL服务器并执行一个查询。具体来说,我们执行的查询是获取在1999年1月1日到1999年12月31日之间被聘用的员工信息。查询结果通过for循环进行输出。
需要注意的是,在MySQL Connector中执行SQL查询时,可以使用参数化的SQL语句来帮助我们避免SQL注入的风险。在上面的例子中,我们通过使用占位符%s来传递查询参数。
使用Python中的SQLAlchemy进行访问
SQLAlchemy安装
除了MySQL Connector外,Python中还有一种流行的访问MySQL的API包,那就是SQLAlchemy。与MySQL Connector不同,SQLAlchemy是一个ORM(对象关系映射)框架,它可以将Python对象和数据库表进行映射,从而让我们可以通过Python的面向对象方式来操作数据库。在使用SQLAlchemy之前,我们需要通过pip来安装这个API包:
pip install sqlalchemy
安装成功后,我们就可以开始使用SQLAlchemy来连接到MySQL服务器并执行SQL语句了。
SQLAlchemy服务器连接配置
与MySQL Connector类似,我们在使用SQLAlchemy连接到MySQL服务器时也需要提供连接相关的信息。下面是一个使用SQLAlchemy连接MySQL服务器的例子:
from sqlalchemy import create_engine
user = 'johndoe'
password = 'secret'
host = 'localhost'
port = '3306'
database = 'employees'
# MySQL Connector使用的连接字符串格式为:mysql+mysqlconnector://:@[:]/
# SQLAlchemy使用的连接字符串格式为:mysql+mysqldb://:@[:]/
engine = create_engine('mysql+mysqldb://{}:{}@{}:{}/{}'.format(user, password, host, port, database))
with engine.connect() as conn:
result = conn.execute("SELECT * FROM employees LIMIT 10")
for row in result:
print(row)
在上面的代码中,我们通过create_engine()方法创建了一个数据库引擎对象engine,然后使用这个对象来连接到MySQL服务器。
执行SQL查询
连接到MySQL服务器后,我们就可以使用SQLAlchemy来执行SQL查询了。下面是一个使用SQLAlchemy执行SQL查询的例子:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
user = 'johndoe'
password = 'secret'
host = 'localhost'
port = '3306'
database = 'employees'
engine = create_engine('mysql+mysqldb://{}:{}@{}:{}/{}'.format(user, password, host, port, database))
Base = declarative_base()
class Employee(Base):
__tablename__ = 'employees'
emp_no = Column(Integer, primary_key=True)
birth_date = Column(String)
first_name = Column(String)
last_name = Column(String)
gender = Column(String)
hire_date = Column(String)
Session = sessionmaker(bind=engine)
session = Session()
for employee in session.query(Employee).filter(Employee.first_name == 'Georgi').all():
print(employee.first_name, employee.last_name, employee.hire_date)
在上面的代码中,我们创建了一个ORM类Employee,它对应了MySQL服务器中的employees表。然后使用Query对象来执行了一个查询,这个查询获取了所有名字为Georgi的员工的相关信息。
尽管在SQLAlchemy中使用ORM可以使代码更加简洁,但是对于一些简单的查询,使用ORM可能会让代码变得更加复杂。在这种情况下,我们仍然可以使用SQLAlchemy的核心API来执行查询,例如使用engine.execute()方法来执行原生SQL语句。
总结
本文介绍了Python中访问MySQL的两种常用方式:MySQL Connector和SQLAlchemy。无论是使用哪种方式,我们都需要提供一些必要的连接信息,例如MySQL服务器的位置、用户名、密码和要连接的数据库名称等等。在成功连接到MySQL服务器后,我们就可以使用Python中的SQL语句来与MySQL进行交互了。SQLAlchemy提供了ORM功能,可以将Python对象和MySQL数据库表进行映射,提高了代码的可读性和可维护性。