python操作mysql

 

Python DB-API

Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同 的方式操作各数据库。
使用流程:
1.引入API模块。
2.获取与数据库的连接。
3.执行SQL语句和存储过程。
4.关闭数据库连接。

 

python操作mysql的模块安装

Python2
安装MySQLdb模块,不支持pip安装,可以通过网站下载安装:https://pypi.org/project/MySQL-python/1.2.5/
安装依赖包:

yum install –y python-devel mysql-devel gcc

 

Python3
不支持MySQLdb了,可以安装pymysql模块,使用pip install pymysql进行安装即可。

 

MySQL的事务

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
1、事务的原子性:一组事务,要么成功;要么撤回。
2、稳定性 : 有非法数据(外键约束之类),事务撤回。
3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候把事务保存到日志里Mysql的事务。

MariaDB [(none)]> show variables like "%auto%";
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| auto_increment_increment    | 1     |
| auto_increment_offset       | 1     |
| autocommit                  | ON    |
| automatic_sp_privileges     | ON    |
| innodb_autoextend_increment | 8     |
| innodb_autoinc_lock_mode    | 1     |
| innodb_stats_auto_update    | 1     |
| sql_auto_is_null            | OFF   |
+-----------------------------+-------+

我们可以看到autocommit是开启状态,即我们在执行sql语句之后,mysql会为我们自动提交,如果想要手动提交,可以set autocommit = 0,这样只是临时生效,要永久生效的话,需要更改配置文件。

 

MySQL的常用操作

授权超级用户:grant all privileges on *.* to 'tangnanbing'@'%' identified by '1qa z@W SX' with grant option;
查看库:show databases;
查看都有哪些库 show databases;
查看某个库的表 use db; show tables \G ;
查看表的字段desc tb;
查看建表语句 show create table tb;
当前是哪个用户select user() ;
当前库 select database() ;
创建库 create database db1;
创建表 create table t1 (id int, name char(40 ) address varchar (30 ));

 

MySQL的连接

1.创建数据库
create database python;
2. 授权用户
grant all privileges on *.* to 'yangjian'@'%' identified by '123456' with grant option;
flush privilege;
3. 建立连接
conn=MySQLdb.connect(host=  "196.186.176.210",user=  "yangjian",passwd="123456   ",db=  "test")

 

比较常用的参数包括:
host:数据库主机名.默认 是用本地主机
user:数据库登陆名.默认是当前用户
passwd:数据库 登陆 的秘密.默认为空
db:要使用的数据库名.没有默认值
port:MySQL服务使用的TCP端口.默认是3306,数字类型
charset:数据库编码Mysql的连接

 

下面实际操作一下:

import pymysql

# 建立连接
conn = pymysql.connect(host = "196.186.176.210", port = 3306, user = "yangjian", passwd = "123456", db = "test")

# 创建游标
cursor = conn.cursor()

# sql语句
sql = "select version()"

# 执行sql语句
cursor.execute(sql)

# 取回结果
result = cursor.fetchone()
print("Database version: %s " % result)

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

结果:
Database version: 5.5.56-MariaDB 

 

我们可以把上面的代码写成一个类

import pymysql

class TestMysql(object):
    def __init__(self):
        self.dbConfig = {
            "host": "196.186.176.210",
            "port": 3306,
            "user": "yangjian",
            "passwd": "123456",
            "db": "test"
        }
        
        # 建立连接
        conn = pymysql.connect(**self.dbConfig)
        self.a = conn

    def select(self):
        sql = "select * from memory limit 2"
        cursor = self.a.cursor()
        cursor.execute(sql)
        
        # fetchall 取回所有结果    fetchone取回一条结果
        result = cursor.fetchall()
        print(result)

    def update(self):
        pass

if __name__ == '__main__':
    
    # 实例化类
    conn = TestMysql()
    
    # 调用类方法
    conn.select()
    
结果:
((303, 1523236486), (303, 1523236487))

 

posted @ 2018-05-06 10:09  quartzite  阅读(254)  评论(0编辑  收藏  举报