目录

一、连接MySQL

二、操作数据库

1、创建表

2、添加数据

3、查询数据

4、修改数据

5、关闭游标,数据库连接

三、其它补充

1、MySQL 数据类型

数值类型

日期和时间类型

字符串类型

2、commit()语句


在Python3中使用mysql数据库时,可以安装pymysql库,当然其它库也可以,基本原理差不多。

pip3 install pymysql

一、连接MySQL

import pymysql

# 连接Mysql
db = pymysql.connect(host="127.0.0.1",
                     user="noah",
                     password="noah",
                     port=3306, # 端口
                     database="test",
                     charset='utf8')

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

各个参数的含义:

  • 参数 1 :mysql 服务器所在的主机 IP
  • 参数 2 :用户名;
  • 参数 3 :密码;
  • 参数 4 :连接的 mysql 主机的端口,默认是 3306;
  • 参数 5 :连接的数据库名;
  • 参数 6 :通信采用的编码方式,默认是'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码;

二、操作数据库

1、创建表

# 如果数据表已经存在使用execute()方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

# 提交
cursor.execute(sql)

注:以后用代码创建表的机会并不多,表一般都是我们提前创建好的。 

2、添加数据

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Win', 'Xiaomin', 30, 'M', 1000)"""
try:
    cursor.execute(sql)
    # 提交到数据库执行
    dbmit()
except:
    # 发生错误时回滚
    db.rollback()
  • 插入数据一定要用 try…except…语句,因为万一没插入成功,其余代码都无法执行。
  • import pymysql,此模块是默认开启mysql的事务功能的,因此,进行“增”、“删”、“改”的时候,一定要使用dbmit()提交事务,否则就看不见所插入的数据。

3、查询数据

# Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
# fetchone(): 接收全部的返回结果行.
# rowcount: 这是方法获取下一个查询结果集。结果集是一个对象
# fetchall():接一个只读属性,并返回执行execute()方法后影响的行数。

# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE WHERE INCOME > {}".format(900)
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 获取所有记录列表
    results = cursor.fetchall()
    for row in results:
        fname = row[0]
        lname = row[1]
        age = row[2]
        sex = row[3]
        income = row[4]
        # 打印结果
        print("fname={},lname={},age={},sex={},income={}".format(fname, lname, age, sex, income))
except:
    print("Error: unable to fecth data")

这里有几个细节说明如下:

  • 可以直接让Mysql以键值对的形式返回,连接时设置 cursorclass = pymysql.cursors.DictCursor即可,如下所示:
pymysql.connect(host=host, port=port, user=user, password=password, database=database, charset='utf8', cursorclass = pymysql.cursors.DictCursor)

参考:Python中让MySQL查询结果返回字典类型的方法

  • 组合sql查询语句时,注意语法,比如下面的语法就会报错:"pymysql.err.OperationalError: (1054, "Unknown column 'manual' in 'where clause'")"
caseId = 1
srcType = "manual"

query_sql = 'select * from REPLAY_TASK_TABLE where id={} and src_type={};'.format(, caseId, srcType)

正确的写法是:区别就是组合查询语句时,src_type={}改成了src_type="{}",字符串类型的字段必须使用字符串的值格式。

caseId = 1
srcType = "manual"

query_sql = 'select * from {} where id={} and src_type="{}";'.format(conf.REPLAY_TASK_TABLE, caseId, srcType)

4、修改数据

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '{}'".format('M')
try:
    cursor.execute(sql)
    # 提交到数据库执行
    dbmit()
except:
    # 发生错误时回滚
    db.rollback()

# 删除数据
# SQL 刪除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > {}".format(30)
try:
    cursor.execute(sql)
    # 提交到数据库执行
    dbmit()
except:
    # 发生错误时回滚
    db.rollback()

5、关闭游标,数据库连接

cursor.close()
db.close()

三、其它补充

1、MySQL 数据类型

MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。

MySQL 支持多种类型,大致可以分为三类:数值日期/时间字符串(字符)类型。

数值类型

MySQL 支持所有标准 SQL 数值数据类型。

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC),以及近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。

关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

BIT数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB表。

作为 SQL 标准的扩展,MySQL 也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

类型大小范围(有符号)范围(无符号)用途
TINYINT1 Bytes(-128,127)(0,255)小整数值
SMALLINT2 Bytes(-32 768,32 767)(0,65 535)大整数值
MEDIUMINT3 Bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
INT或INTEGER4 Bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
BIGINT8 Bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
FLOAT4 Bytes(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度
浮点数值
DOUBLE8 Bytes(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度
浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性,将在后面描述。

类型大小
( bytes)
范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP4

1970-01-01 00:00:00/2038

结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

YYYYMMDD HHMMSS混合日期和时间值,时间戳

字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

类型大小用途
CHAR0-255 bytes定长字符串
VARCHAR0-65535 bytes变长字符串
TINYBLOB0-255 bytes不超过 255 个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据

2、commit()语句

数据库语言可分为四种:

  • 数据操作语言(Date Manipulation Language)DML语言,实现对数据的基本操作,”增删改”。UPDATE、DELETE、INSERT
  • 数据定义语言(Data Definition Language )DDL语言,可以实现对数据库结构、操作方法等的定义:
    • create table 创建表
    • alter table 修改表
    • drop table 删除表
    • truncate table 删除表中所有行
    • create index 创建索引
    • drop index 删除索引**
  • 数据库控制语言(Data Control Language)DCL授权,角色控制
    • GRANT 授权
    • REVOKE 取消授权
  • 事务控制语言(Transaction Control Language)事务控制语言
    • SAVEPOINT 设置保存点
    • ROLLBACK 回滚
    • SET TRANSACTION
  • 在这之中,DDL语句是自带commit的,而执行DML命令如果没有提交,将不会被其他会话看到。除非在DML命令之后执行了DDL命令或DCL命令,或用户退出会话,或终止实例,此时系统会自动发出commit命令,使未提交的DML命令提交。建议每次对MYSQL中的表修改或插入数据后 都提交一下(commit) !

参考:

MySQL 索引 | 菜鸟教程

Python3操作MySQL数据库 - DesireYang - 博客园

更多推荐

Python操作Mysql