文章目录

  • 1.连接数据库
  • 2.创建游标对象
  • 3.对数据库进行操作 (放入异常捕获语句中)
  • 3.1创建数据库表
  • 3.2插入表中数据(单条 多条 )
  • 3.3查询数据库
  • 3.4 移动游标指针


1.连接数据库

  • 数据库的导入 import pymysql
  • 连接时注意
    host 连接方式
    user 连接数据库用户
    passwd 数据库密码
    charset 编码方式
import pymysql  ##导入数据库模块
conn = pymysql.connect(host='localhost',
                       user='root',
                       password='redhat',
                       db='westos',
                       charset='utf8'
)
  • 连接错误解决
    连接数据库错误:数据库连接失败 报错2003
    解决vim /etc/my.cnfskip-networking=1注释掉,对外开放数据库接口

2.创建游标对象

(1)什么是游标

  • 游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标可以被看作是一个查询结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成的一个临时文件,提供了在查询结果集中向前或向后浏览数据、处理结果集中数据的能力。
  • 有了游标,用户就可以访问结果集中任意一行数据,在将游标放置到某行之后,可以在该行或从该位置的行块上执行操作。

(2)游标对象的创建

cur = conn.cursor()

3.对数据库进行操作 (放入异常捕获语句中)

成功连接数据库之后,数据库中的操作语句可以直接使用

3.1创建数据库表

try:
    create_sqli = "create table hello (id int,name varchar(30));"
    print(cur.execute(create_sqli)) ##执行数据库操作
except Exception as e:
    print('创建数据表失败:',e)
else:
    print('创建数据表成功')

3.2插入表中数据(单条 多条 )

注意:一定要提交con.commit() 否则数据库中查询不到;自动提交 autocommit()

(1)单条数据插入

try:
    insert_sqli = "insert into hello values(3,'apple');"
    cur.execute(insert_sqli)
except Exception as e:
    print('插入数据失败:',e)
else:
    # 如果是插入数据,一定要提交数据 不然数据库中的数据表中找不到要插入的数据
    conn.commit()
    print('插入数据成功')

(2)多条数据插入

  • 方法一元组类型插入 (%d,‘%s’) 这里 %s必须带单引号,否则会报错
try:
    info = [(i,i) for i in range(100,1000)]
    insert_sqli = "insert into hello values(%d,'%s');"
    for item in info:
        print('insert语句:',insert_sqli %item)
        cur.execute(insert_sqli %item)
except Exception as e:
    print('插入多条数据失败:',e)
else:
    print('插入多条数据成功')
  • 方法二.cur.executemany()封装方法插(%s,%s)
try:
    info = [(i,i) for i in range(100,1000)]
    insert_sqli = "insert into hello values('%s','%s');"
    cur.executemany(insert_sqli,info)
except Exception as e:
    print('插入多条数据失败:',e)
else:
    print('插入多条数据成功')

3.3查询数据库

  • 默认不返回查询结果集 返回数据记录数
  • 元组形式返回 cur.fetchone() 返回一个查询结果数据;依次返回
    cur.fetchmany(n) 获取指定个数查询结果集
    cur.fetchall()获取未被查询出来的其他结果集和
sqli = 'select name from hello where id =100'
result = cur.execute(sqli)
print(result)
cur.execute(sqli)
a = cur.fetchone()
print(a)
print(cur.fetchone()) ##获取下一个查询结果集
print(cur.fetchone())

print(cur.fetchmany(4)) ##获取指定个数查询结果集

info = cur.fetchall()
print(info)

3.4 移动游标指针

cursor.scroll(position(value), mode="relative | absolute")方法,来设置相对位置游标和绝对位置游标

  • mode='absolute'时,代表绝对移动;value就代表移动的绝对位置
    value=0就代表移动到位置0处,就是结果集开头;
    value=3就是移动到位置3处,也就是第4条记录处
  • mode='relative'时,代表相对移动;value就是移动的长度.
    value=2 value>0 向后移动(从位置0移动到位置2);
    value=-2 value<0 向前移动(比如从位置2移动到位置0)
sqli = 'select * from hello;'
cur.execute(sqli)
print(cur.fetchmany(3))
print('正在移动指针到最开始的地方....')
cur.scroll(0,'absolute')
print(cur.fetchmany(3))
cur.scroll(0,'absolute')
print(cur.fetchmany(2))
print(cur.fetchall())

# 回游标之后的所有结果
print(cur.fetchmany(3))
cur.scroll(-2,mode='relative')
print(cur.fetchmany(2))