【mysql-03】python连接数据库及使用

一、Python连接Mysql数据库的几种方式(了解)

  • MysqlDB
    • 是python2.x连接数据库的工具,曾使用非常广泛
    • 现在由于进入了python3.x时代,基本已经废弃了
  • MysqlClient
    • 是mysqldb的衍生版本,兼容mysqldb
    • 是django的orm映射工具
  • PyMysql
    • 是一个纯Python开发的工具,也兼容mysqldb
    • 使用简单,功能强大
  • SQLAlChemy
    • 是一个既支持纯sql语言,也支持ORM映射的工具

python3 安装pymysql:

–>pip install pymysql

二、基础知识

2.1 使用流程

2.2 游标

类似于指针,指针是指向数据的地址

在计算机中,我们获取数据不是直接获取的,而是通过地址获取,而指针就是指向地址的探头,通过指针,我们才能访问到具体的数据。

三、创建,查询,增,改,删除等操作

3.1 创建表

代码

#创建表

# 1 导包

import pymysql

# 2 建立连接

db_conn = pymysql.connect(host='10.XXXXX', #改成地址

user='root',

password='669988',

port=33066,

database='test',

charset='utf8')

# 3 获取游标

cursor = db_conn.cursor()

# 4 如果数据表已经存在使用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)

# 5 关闭游标

cursor.close()

# 6 关闭连接

db_conn.close()

使用navicate查看:

3.2 新增单个

代码:和上面相同,删除掉之

# 4 执行插入语句

sql = """INSERT INTO EMPLOYEE(FIRST_NAME,

LAST_NAME, AGE, SEX, INCOME)

VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""

try:

cursor.execute(sql)

# 提交到数据库执行

db_conn.commit()

except:

# 发生错误时回滚

db_conn.rollback()

# 5 查看执行结果

# 注意:写入语句不能通过fetchone和fetchall来查看

cursor.execute(f"SELECT * FROM EMPLOYEE WHERE INCOME > {1000}")

print("全部结果:", cursor.fetchall())

结果:

3.3 新增多个

代码:

#另一种插入数据的方式,通过字符串传入值

sql = "insert into EMPLOYEE values(%s,%s,%s,%s,%s)"

insert = cur.executemany(sql,[('wang','b',30,'M',10000),('an','hy',27,'W',6000)])

print ('批量插入返回受影响的行数:',insert)

cursor.close()

conn.commit()

也可以直接服务器查看结果:

3.4 修改

主要代码:

update_sql = f"UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '{'M'}'"

cursor.execute(update_sql)

# 查看结果

cursor.execute(f"SELECT * FROM EMPLOYEE")

print("全部结果:", cursor.fetchall())

结果:

3.5 删除

主要代码:

# 4 执行删除语句

delete_sql = f"DELETE FROM EMPLOYEE WHERE AGE > {30}"

cursor.execute(delete_sql)

# 查看删除结果

cursor.execute(f"SELECT * FROM EMPLOYEE")

print("删除之后的结果: {}".format(cursor.fetchall()))

db_conn.commit()

四、事务回滚

4.1 事务的概念:

介绍: 事务是对一组工作序列的操作,这组操作要么全部成功,要么全部失败。

例子: 银行转行案例

特点(重点) :事务有4个特点(ACID)

原子性: 是指事务就像原子一样不可分割

一致性: 事务提交前后,数据的状态不会发生改变

隔离性(最难): 是指事务与事务之间不能相互干扰

持久性: 提交事务后,对数据状态的改变是永久性。

注意:使用事务的数据库,理论上只能够通过事务来改变数据。

详细的可见上一章节

4.2 数据库事务提交的机制

自动提交:

建立连接时通过,autocommit的值进行设置

建立连接之后,通过conn.autocommit(True)进行设置

手动提交:

指在未开启自动提交事务之前,可以使用手动提交事务

conn.commit() 提交事务

conn.rollback() 回滚事务

4.3 事务操作举例

代码:

import pymysql

db_conn = pymysql.connect(host='10.19.XXX',

user='root',

password='669988',

port=33066,

database='test',

charset='utf8')

cursor = db_conn.cursor()

#修改前查询所有数据

cursor.execute("select * from EMPLOYEE")

print("修改前的数据为:")

for res in cursor.fetchall():

print(res)

 

print("*"*40)

cursor.execute("update EMPLOYEE set INCOME=3000 where FIRST_NAME='Mac'")

#修改后查询所有数据

cursor.execute("select * from EMPLOYEE")

print("修改后的数据为:")

for res in cursor.fetchall():

print(res)

   

print("*"*40)

#回滚事务

db_conn.rollback()

#回滚后查询所有数据

cursor.execute("select * from EMPLOYEE")

print("回滚后的数据为:")

for res in cursor.fetchall():

print(res)

   

cursor.close()

db_conn.commit()

db_conn.close()

print('sql执行成功')

查看数据库:

五、完整实例

结果:

例子代码:

'''插入100条数据到数据库(一次插入多条)'''

import pymysql

import string,random

#打开数据库连接

conn = pymysql.connect(host='10.19.156.252',

user='root',

password='669988',

port=33066,

charset='utf8')

conn.select_db('test')

#获取游标

cur=conn.cursor()

   

#创建user表

cur.execute('drop table if exists user')

sql = """CREATE TABLE IF NOT EXISTS user (

id int(11) NOT NULL AUTO_INCREMENT,

name varchar(255) NOT NULL,

age int(11) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"""

cur.execute(sql)

#修改前查询所有数据

cur.execute("select * from user;")

print('修改前的数据为:')

for res in cur.fetchall():

print (res)

   

print ('*'*40)

#循环插入数据

words=list(string.ascii_letters)

sql="insert into user values(%s,%s,%s)"

random.shuffle(words)#打乱顺序

cur.executemany(sql,[(i+1,"".join(words[:5]),random.randint(0,80)) for i in range(100) ])

   

#插入100条后查询所有数据

cur.execute("select * from user;")

print('修改后的数据为:')

for res in cur.fetchall():

print (res)

print ('*'*40)

   

cur.close()

conn.commit()

conn.close()

print('sql执行成功')

数据库操作之python连接mysql的四种方式、pymysql操作数据库、事务 https://blog.csdn.net/limy_liu/article/details/103831912

https://blog.csdn.net/kongsuhongbaby/article/details/84948205

原文地址:https://www.cnblogs.com/yifanrensheng/p/14352542.html