前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中的SQL库:MySQL

Python中的SQL库:MySQL

作者头像
老齐
发布2020-05-14 20:40:27
1K0
发布2020-05-14 20:40:27
举报
文章被收录于专栏:老齐教室老齐教室

在上一篇《Python中的SQL库:SQLite》中,已经对数据库的基本操作有所概括,并且用SQLite做了演示。本文将重点介绍在Python程序中如何操作MySQL。

本文中所用的数据库,其基本结构与上一篇文章相同,此处不再赘述。

连接数据库

对于MySQL而言,与SQLite不同之处在于Python中没有内置的模块,如果要连接MySQL数据库,需要安装第三方的模块。这方面的模块比较多,比如本文使用的mysql-connector-python只是其中之一。

首先,要安装这个模块。

代码语言:javascript
复制
pip install mysql-connector-python

然后,编写创建连接MySQL的函数:

代码语言:javascript
复制
import mysql.connector
from mysql.connector import Error

def create_connection(host_name, user_name, user_password):
    connection = None
    try:
        connection = mysql.connector.connect(
            host=host_name,
            user=user_name,
            passwd=user_password
        )
        print('Connection to MySQL DB successful')
    except Error as e:
        print(f"The error '{e}' occurred.")

    return connection
    
connection = create_connection("localhost", 'root', "12345678")

上面的函数汇总,有三个需要提供的参数:

  • host_name:MySQL服务的远程地址,如果是使用的本地服务,则可以写成localhost
  • user_name:登录MySQL的用户名,本例中直接使用root
  • user_password:即root对应的密码

通过上述参数,利用mysql.connector.connect()函数建立起数据库连接,并且返回连接对象。

然后,可以创建数据库,为此编写如下函数:

代码语言:javascript
复制
def create_database(connection, query):
    cursor = connection.cursor()
    try:
        cursor.execute(query)
        print("Database create successfully")
    except Error as e:
        print(f"The error '{e}' occurred.")

create_database_query = "CREATE DATABASE readers"
create_database(connection, create_database_query)

函数create_database的参数connection是前面已经创建的连接对象,query是SQL语句,利用游标对象的execute方法执行SQL语句。如此,创建了名为readers的MySQL数据库。

然后,重写create_connection函数,在其中指定所要连接的具体数据库。

代码语言:javascript
复制
import mysql.connector
from mysql.connector import Error

def create_connection(host_name, user_name, user_password, db_name):
    connection = None
    try:
        connection = mysql.connector.connect(
            host=host_name,
            user=user_name,
            passwd=user_password,
            database=db_name
        )
        print('Connection to MySQL DB successful')
    except Error as e:
        print(f"The error '{e}' occurred.")

    return connection

connection = create_connection("localhost", 'root', "12345678", 'readers')

这样,就得到了链接数据库readers的连接对象connection

创建数据库表

前面已经看到,要在Python中执行各种SQL语句,需要通过cursor.execute()函数。下面就创建一个专门的函数,来完成各种SQL语句的操作。

代码语言:javascript
复制
def execute_query(connection, query):
    cursor = connection.cursor()
    try:
        cursor.execute(query)
        connection.commit()
        print("Query executed successfully")
    except Error as e:
        print(f"The error '{e}' occurred")

这个函数完成的,其实是所有针对数据库的“写入”操作。

例如,如下是创建users表的SQL语句:

代码语言:javascript
复制
create_users_table = """
CREATE TABLE IF NOT EXISTS users(
    id INT AUTO_INCREMENT,
    name TEXT NOT NULL,
    age INT,
    gender TEXT,
    PRIMARY KEY (id)
) ENGINE = InnoDB
"""

通过此语句,将创建users数据库表,其中包括的字段有:id, name, age, gender,然后用下面的方式,调用函数:

代码语言:javascript
复制
execute_query(connection, create_users_table)

如此,即创建了users数据库表,并具有前述个字段。

同样方法,编写创建posts表的SQL语句字符串:

代码语言:javascript
复制
create_posts_table = """
CREATE TABLE IF NOT EXISTS posts (
  id INT AUTO_INCREMENT,
  title TEXT NOT NULL,
  description TEXT NOT NULL,
  user_id INTEGER NOT NULL,
  FOREIGN KEY fk_user_id (user_id) REFERENCES users(id),
  PRIMARY KEY (id)
) ENGINE = InnoDB
"""

execute_query(connection, create_posts_table)

在上一篇中已经说过,usersposts两张表之间是一对多的关系,在posts表中就增加了一个名为user_id的字段作为外键,它的值与users表中的id字段值对应。

以上操作,与上一篇中SQLite操作类似。

插入

插入记录,当然也是“写入”操作,继续使用前面已经编写的execute_query()函数,我们需要做的就是编写INSERT INTO语句。例如:

代码语言:javascript
复制
insert_users = """
INSERT INTO
`users` (`name`, `age`, `gender`)
VALUES
('zhagnsan',23,'male'),
('lisi',24,'female'),
('wangwu',25,'male');
"""

execute_query(connection, insert_users)

上述操作是向users表中增加几条用户记录。

在前面的execute_query()函数中,使用的是游标对象的execute方法,此外,还有另外一个方法,在写入多条记录的时候,速度更快,如下所示:

代码语言:javascript
复制
sql = "INSERT INTO likes ( user_id, post_id ) VALUES ( %s, %s )"
val = [(4, 5), (3, 4)]

cursor = connection.cursor()
cursor.executemany(sql, val)
connection.commit()

查询

查询,即“读”的操作,与上一篇的中所写的函数一样。

代码语言:javascript
复制
def execute_read_query(connection, query):
    cursor = connection.cursor()
    result = None
    try:
        cursor.execute(query)
        result = cursor.fetchall()
        return result
    except Error as e:
        print(f"The error '{e}' occurred")
        
select_users = "SELECT * FROM users"
users = execute_read_query(connection, select_users)
for user in users:
   print(user)

返回结果如下:

代码语言:javascript
复制
(1, 'zhagnsan', 23, 'male')
(2, 'lisi', 24, 'female')
(3, 'wangwu', 25, 'male')

更新

对数据库的update,显然是一种“写入”操作,因此,前面编写的execute_query函数对于更新操作依然有效。

代码语言:javascript
复制
update_post_description = """
UPDATE
  posts
SET
  description = "The weather has become pleasant now"
WHERE
  id = 2
"""

execute_query(connection, update_post_description)

如果再用前面的方法进行查询,就可以看到更新之后的结果了。

删除

执行删除操作的SQL语句,可以通过前面所创建的execute_query()函数完成。

代码语言:javascript
复制
delete_comment = "DELETE FROM comments WHERE id = 2"
execute_query(connection, delete_comment)

以上演示了在Python程序中对MySQL数据库的各项操作,基本上与上一篇中SQLite的操作类似。其实,其他关系型数据库,操作都是如此进行。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 连接数据库
  • 创建数据库表
  • 插入
  • 查询
  • 更新
  • 删除
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档