美文网首页
Python 连接 MySQL

Python 连接 MySQL

作者: 江湖十年 | 来源:发表于2018-03-08 15:43 被阅读77次
  1. 安装 python 连接 mysql 工具
pip install PyMySQL
  1. python 连接 mysql

import pymysql


try:
    # 打开数据库连接
    db = pymysql.connect(host="127.0.0.1", port=3306, user="pythonic", passwd="pythonic", db="test1", charset="utf8")
    # 使用 db 的 cursor 方法, 创建一个游标对象 cursor
    cursor = db.cursor()

    # 所要执行的 sql 语句
    # insert
    # sql = 'insert into students(sname) values("pymysql")'
    # update
    # sql = 'update students set sname="mysqldb" where id=5'
    # delete
    sql = 'delete from students where id=7'
    # 使用游标对象 cursor 的 execute 方法执行 sql 语句
    cursor.execute(sql)

    # 因为 python 连接 mysql 后默认开启了事务, 所以要使执行语句的结果生效, 要进行 commit 操作
    db.commit()

    # 操作完成后, 关闭 cursor 对象和数据库对象 db
    cursor.close()
    db.close()

    print("OK")
except Exception as err:
    print("error: %s" % err)

  1. 参数化, 参数化主要解决的是 sql 注入的问题, 可以给 execute 方法传入第二个参数用来实现参数化, 这个参数必须是一个列表

import pymysql


try:

    db = pymysql.connect(host="127.0.0.1", port=3306, user="pythonic", passwd="pythonic", db="test1", charset="utf8")
    cursor = db.cursor()

    # 接收用户输入的数据
    sname = input("请输入用户名:")

    # %s 是用来占位的, 区别于 python 中的格式化, 这里输入任何东西都是用 %s
    sql = 'insert into students(sname) values(%s)'
    # execute 第一个参数是要执行的 sql 语句, 第二个参数是一个列表,
    # 将用户输入的用户名 name 组装成列表传入 execute, 如果有多个
    # 值, 列表中值的顺序要和 sql 语句中 values(%s) 所要插入值的顺序对应
    cursor.execute(sql, [sname])

    db.commit()

    cursor.close()
    db.close()

    print("OK")
except Exception as err:
    print("error: %s" % err)

  1. 封装代码
# MySQLHelper.py

import pymysql


class MySQLHelper(object):

    def __init__(self, host, port, user, passwd, db, charset="utf8"):
        self.host = host
        self.port = port
        self.user = user
        self.passwd = passwd
        self.db = db
        self.charset = charset

    def connect(self):
        self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db, charset=self.charset)
        self.cursor = self.conn.cursor()

    def close(self):
        self.cursor.close()
        self.conn.close()

    def get_one(self, sql, params=[]):
        result = None
        try:
            self.connect()
            self.cursor.execute(sql, params)
            result = self.cursor.fetchone()
            self.close()
        except Exception as e:
            print("error: %s" % e)
        return result

    def get_all(self, sql, params=[]):
        result = []
        try:
            self.connect()
            self.cursor.execute(sql, params)
            result = self.cursor.fetchall()
            self.close()
        except Exception as e:
            print("error: %s" % e)
        return result

    def insert(self, sql, params=[]):
        return self.__edit(sql, params)

    def update(self, sql, params=[]):
        return self.__edit(sql, params)

    def delete(self, sql, params=[]):
        return self.__edit(sql, params)

    def __edit(self, sql, params):
        count = 0
        try:
            self.connect()
            count = self.cursor.execute(sql, params)
            self.conn.commit()
            self.close()
            count = 1
        except Exception as e:
            print("error: %s" % e)
        return count

  1. 测试封装的代码
# test_MySQLHelper.py

from MySQLHelper import MySQLHelper


# 测试添加
# sql = 'insert into stus(sname, sgender) values(%s,%s)'
# sname = input("请输入用户名:")
# sgender = input("请输入用户性别, 1为男, 0为女:")
# params = [sname, bool(sgender)]

# 测试修改
# sql = 'update stus set sname=%s where id=%s'
# sname = input("请输入新用户名:")
# sid = int(input("请输入用户 id:"))
# params = [sname, sid]


# mysql_helper = MySQLHelper("127.0.0.1", 3306, "pythonic", "pythonic", "test1")
# count = mysql_helper.insert(sql)
# if count == 1:
#     print("OK")
# else:
#     print("error")


# 测试查询
sql = 'select * from stus order by id desc'


mysql_helper = MySQLHelper("127.0.0.1", 3306, "pythonic", "pythonic", "test1")
one = mysql_helper.get_one(sql)
all = mysql_helper.get_all(sql)
print(one)
print(all)

  • 原始数据


    01.原始数据
  • 测试添加一条数据


    02.测试添加
  • 测试修改数据


    03.测试修改
  • 测试查询数据


    04.测试查询
  1. 总结
connect:
    连接数据库原则:尽量晚打开, 尽量早关闭(尽量避免有可能别的地方也在操作数据库)
    connect(host, port, user, passwd, db, charset)
    course()
    commit()
    close()

cursor:
    execute()
    如果执行 insert/update/delete 语句时, 需要 commit()
    fetchone()
    fetchall()
    close()

相关文章

网友评论

      本文标题:Python 连接 MySQL

      本文链接:https://www.haomeiwen.com/subject/fplyfftx.html