十四、python访问mysql

PyMySQL

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
python中的DB-API为大多数数据库实现了接口,使用它连接数据库,就可以使用相同的方式操作各数据库。
使用DB-API基本流程


  1. 引入API模块。
  2. 获取数据库连接参数,打开数据库连接。
  3. 执行SQL语句和存储过程。
  4. 关闭数据库连接

使用pymysql(同时支持python2和3)作为连接mysql数据库的接口。直接使用pip install pymysql安装即可。
注意:pip安装之后使用pycharmimport
pymysql可能出现无法使用的情况,此时可直接在pycharm中安装pymysql包。通过File–>Settings–>Project:XXX–>Project
Interpreter可以看到所有已安装的包,点击右边绿色+即可添加。
python2.X中还可以使用MySQLdb(仅支持python2),点击 mysqldb可下载安装。

mysql数据库

mysql中的事务

事务是必须满足4个条件(ACID):
Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)。

  • 原子性:一组事务,要么成功;要么撤回。
  • 稳定性:有非法数据(外键约束之类),事务撤回。
  • 隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
  • 可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, - innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里
    mysql中autocommit参数默认为开启,若需要多条sql语句同时提交,可以通过start transaction开启事务,通过rollback回滚事务,通过commit提交事务。
    查询autocommit参数状态:show variables like autocommit。

python访问mysql

一个典型的执行过程

import pymysql

conn = pymysql.connect(host="192.168.48.136", port=3306, user="xiang", passwd="xiang", db="test")
cus = conn.cursor()
sql = "select * from test2;"
cus.execute(sql)
result = cus.fetchall()
print(result)
cus.close()
conn.close()

在实际编码过程中,推荐通过函数形式调用,方便重复使用和修改。

def connect_mysql():
    db_config = {
        'host': '192.168.48.128',
        'port': 3306,
        'user': 'xiang',
        'passwd': '123456',
        'db': 'python',
        'charset': 'utf8'
    }

    cnx = pymysql.connect(**db_config)
    return cnx

查询数据

import sys
import pymysql
# 打开数据库连接
db = pymysql.connect("10.0.0.101","sheng","123456","Sheng_DB" ,charset='utf8')

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# SQL 查询语句
sql = "SELECT * FROM student"
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 获取所有记录列表
    results = cursor.fetchall()
    print(results)
    print(len(results[0]))
    for row in results:
        sid = row[0]
        gender = row[1]
        class_id=row[2]
        sname=row[3]
        # 打印结果
        print("id是:%s,性别:%s,班级编号:%s,姓名:%s" %(sid, gender,class_id,sname ))
    # print(results)
except:
    print("Error: unable to fetch data")

# 关闭数据库连接
db.close()

插入数据代码

# -*- coding: utf-8 -*-
__author__ = 'ShengLeQi'
import pymysql

# # 打开数据库连接
class MySql(object):
    def __init__(self,ip,user_name,passwd,db, char='utf8'):
        self.ip = ip
        # self.port = port
        self.username=user_name
        self.passwd=passwd
        self.mysqldb=db
        self.char=char

        self.MySQL_db = pymysql.connect(
            host=self.ip,
            user=self.username,
            passwd=self.passwd,
            db=self.mysqldb,
            charset=self.char)

    def Sql_exe(self,sql):
        cursor = self.MySQL_db.cursor()
        MySQL_sql = sql
        try:
            # 执行SQL语句
            cursor.execute(MySQL_sql)
            self.MySQL_db.commit()
        except:
            print("Error: unable to fetch data")
            self.MySQL_db.close()
        self.MySQL_db.close()

    # MySql_t=MySql("10.0.0.101","sheng","123456","Sheng_DB",char='utf8' )
MySql_t=MySql("10.0.0.101","novel","123456","Novel",char='utf8' )  #Novel
#
sql="insert into Novel(name,conext) values('name_t','connent_t')"
MySql_t.Sql_exe(sql)

修改数据库

import pymysql  

# 打开数据库连接(ip/数据库用户名/登录密码/数据库名)  
db = pymysql.connect("localhost", "root", "root", "test")  
# 使用 cursor() 方法创建一个游标对象 cursor  
cursor = db.cursor()  

# SQL 更新语句  
sql = "UPDATE user SET name = 'Bob' WHERE id = 1"  
try:  
    # 执行SQL语句  
    cursor.execute(sql)  
    # 提交到数据库执行  
    db.commit()  
except:  
    # 发生错误时回滚  
    db.rollback()  

# 关闭数据库连接  
db.close() 

猜你喜欢

转载自blog.csdn.net/weixin_39934221/article/details/80221355
今日推荐