浅谈Python访问MySQL的正确姿势

介绍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数据库表进行映射,提高了代码的可读性和可维护性。

后端开发标签