python--pymysql

import pymysql
# 如何使用pymysql连接MySQL

# 创建数据库连接
db = pymysql.connect(host="localhost", user="root", password="zgghyys123",
                     db="satori", port=3306)

# 调用cursor方法获取游标,下面我们主要来操作这个cursor方法
cursor = db.cursor()

# 使用execute方法执行查询
cursor.execute("select version()")

# 然后再调用fetchone | fetchall方法获取单条 | 多条数据
data = cursor.fetchone()

print(f"Database version: {data}")  # Database version: ('5.7.17-log',)

# 别忘了最后关闭数据库连接
cursor.close()
db.close()

  

import pymysql
db = pymysql.connect(host="localhost", user="root", password="zgghyys123",
                     db="satori", port=3306)
cursor = db.cursor()

# 创建一张表
# pymysql很简单,就像直接操作数据库一样,写好你的sql语句,然后直接cursor.execute(sql),就自动执行了
sql = '''CREATE TABLE GIRLS(
         NAME CHAR(40) NOT NULL, 
         AGE INT,
         GENDER CHAR(1),
         LENGTH INT, 
         ANIME CHAR(40)   )'''

# 然后表便创建成功了
cursor.execute(sql)

# 查询已存在的表
cursor.execute("show tables")
data = cursor.fetchall()

print(data)  # (('girls',),)
# 数据库里面就一张刚创建的girls表

# 关闭连接
cursor.close()
db.close()

  

import pymysql
from pprint import pprint

db = pymysql.connect(host="localhost", user="root", password="zgghyys123",
                     db="satori", port=3306)
cursor = db.cursor()

# sql插入语句,往数据库里面插入几条记录
sql = '''INSERT INTO GIRLS(NAME, AGE, GENDER, LENGTH, ANIME) 
         VALUES
         ('古明地觉', 17, 'f', 155, '东方地灵殿'),
         ('古明地恋', 16, 'f', 155, '东方地灵殿'),
         ('椎名真白', 16, 'f', 160, '樱花庄的宠物女'),
         ('四方茉莉', 400, 'f', 159, 'sola'),
         ('雨宫优子', 16, 'f', 157, '悠久之翼')'''

cursor.execute(sql)

# 然后我们再获取数据
sql = "select * from girls"
cursor.execute(sql)
data = cursor.fetchall()
pprint(data)
'''
(('古明地觉', 17, 'f', 155, '东方地灵殿'),
 ('古明地恋', 16, 'f', 155, '东方地灵殿'),
 ('椎名真白', 16, 'f', 160, '樱花庄的宠物女'),
 ('四方茉莉', 400, 'f', 159, 'sola'),
 ('雨宫优子', 16, 'f', 157, '悠久之翼'))
'''
# 可以看到数据全部打印出来了,但是我们来看看数据库

  

发现表里面什么都没有,这是为什么?

因为我们少了一步提交的操作,对数据库里的表进行修改,删除,添加等操作时,只会保存在内存中,所以在我们程序还没有结束的时候,是可以获取到的。

一旦程序结束,内存里的数据就没了,而这些数据是没有进入数据库里面的,因此,我们插入完毕之后,要手动提交一下。

try:
    cursor.execute(sql)

    # 一定要有这一步
    db.commit()  # 将之前所做的操作提交上去

except:
    # 发生错误时回滚,回滚当前游标的所有操作,回滚到最初的状态
    # commit是提交游标的所有操作,rollback是回滚游标的所有操作。每一个方法都开启了一个事务
    '''
    什么是事务?以及为什么要有回滚。
    事务:多个操作看成是一个操作,只能全部成功才会成功,要么都成功,要么都不成功。
         这样做的好处是什么?试想一下我们银行转钱,如果古明地觉给她妹妹转了一百万日元。
         相当于古明地觉的账户里应该少一百万,她妹妹的账户里应该多一百万,这两个操作应该看做一个整体。
         但如果古明地觉转了一百万之后,系统出现了问题。古明地觉的账户里少了一百万,但她妹妹的账户却没有多出一百万,等于发生了故障。
         要么都成功,要么都不成功,所以这时候应该回到最初的状态。
    而回滚就相当于滚到古明地觉没有转钱时候的状态,应该把一百万退回到古明地觉的账户里。
    所以这就是为什么要有回滚
    '''
    db.rollback()

cursor.close()
db.close()

 

此时的表里就有数据了

那么接下来我们来获取表里面的数据

import pymysql
from pprint import pprint

db = pymysql.connect(host="localhost", user="root", password="zgghyys123",
                     db="satori", port=3306)
cursor = db.cursor()
sql = "select * from girls"
cursor.execute(sql)

# fetchone,获取一条数据
data1 = cursor.fetchone()
print(data1)  # ('古明地觉', 17, 'f', 155, '东方地灵殿')

  

# fetchall,获取所有数据
data2 = cursor.fetchall()
pprint(data2)
'''
(('古明地觉', 17, 'f', 155, '东方地灵殿'),
 ('古明地恋', 16, 'f', 155, '东方地灵殿'),
 ('椎名真白', 16, 'f', 160, '樱花庄的宠物女'),
 ('四方茉莉', 400, 'f', 159, 'sola'),
 ('雨宫优子', 16, 'f', 157, '悠久之翼'))
'''

# 这里也可以使用for循环,并通过切片的方式获取部分值
for row in data2:
    name = row[0]
    age = row[1]
    gender = row[2]
    length = row[3]
    anime = row[4]
    print(name, age, gender, length, anime)
'''
古明地觉 17 f 155 东方地灵殿
古明地恋 16 f 155 东方地灵殿
椎名真白 16 f 160 樱花庄的宠物女
四方茉莉 400 f 159 sola
雨宫优子 16 f 157 悠久之翼
'''

  

# 有的时候记录很多,不可能全部获取,只想获取一部分,虽然能通过for循环加切片的方式,但是数据还是全部取出来了
# 这里可以使用fetchmany,获取部分数据
data3 = cursor.fetchmany(3)  # 获取3条
pprint(data3)
'''
(('古明地觉', 17, 'f', 155, '东方地灵殿'),
 ('古明地恋', 16, 'f', 155, '东方地灵殿'),
 ('椎名真白', 16, 'f', 160, '樱花庄的宠物女'))
'''

  

猜你喜欢

转载自www.cnblogs.com/traditional/p/9821273.html
今日推荐