python-数据库的操作

1.导入数据库模块
import pymysql
2.连接数据库(所需信息:host user passwd charset)

==如果从数据库中获取的信息是乱码的话,使用UTF-8进行转码。

conn = pymysql.connect(host='localhost',    ##主机名
                       user='root',    ##mysql用户
                       password='redhat',   ##密码
                       db='westos',   ##westos数据库
                       charset='utf8'    ##字符显示方式
)
3.创建游标对象
cur = conn.cursor()  
4.对数据库进行操作
(1)创建数据表

创建数据表的前提是对应的数据库已经建立
还没有执行以下代码时,westos数据库中没有表
在这里插入图片描述

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

执行代码可能会出现以下报错
在这里插入图片描述
解决方法

vim /etc/my.cnf ##检测是否设置为只允许本地连接(skip-networking=1)
systemctl restart mariadb

因为是以kiosk的用户身份运行的pycharm,所以要对kiosk进行所有权限的授予

mysql -uroot -predhat ##登录数据库
grant all on westos.* to kiosk@localhost   ##给kiosk赋予所有权限
flush privileages ##刷新权限列表

在这里插入图片描述
备注:以上都设置完成之后,若还是无法连接,检查火墙状态是否开启,设为关闭状态。
运行上述代码后:
在这里插入图片描述
数据库westos下出现了hello这个表
在这里插入图片描述

(2)在数据表中插入数据

插入一条数据

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

在这里插入图片描述
显示插入数据成功,但是查看westos.hello表中并不能查看到数据
在这里插入图片描述

插入数据后一定要记得conn.commit()进行数据提交,否则数据库中找不到要插入的数据
在这里插入图片描述
在这里插入图片描述
插入多条数据
第一种方式
第一步还是要先连接数据库,参照以上

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('插入多条数据成功')

在这里插入图片描述
在这里插入图片描述
第二种方式:

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('插入多条数据成功')

在这里插入图片描述
在这里插入图片描述

查询数据库

此时westos.hello中的数据为:
在这里插入图片描述
默认不返回查询结果集 返回数据记录数

sqli = 'select name from hello where id =20'   ##寻找id=20的结果
result = cur.execute(sqli)
print(result)

在这里插入图片描述

cur.execute(sqli)
a = cur.fetchone()
print(a)

在这里插入图片描述
获取下一个查询结果集

cur.fetchone() 

获取指定个数查询结果集

print(cur.fetchmany(4)) 

在这里插入图片描述
获取从指针所指位置往后的所有查询结果

info = cur.fetchall()
print(info)

注意:在这里的查询,也是根据指针的位置进行判定,当指针已经移动到该数据的最后一个时,再获取下一个查询结果,就会返回None,此时若想要继续查询,就需要移动游标指针。
在这里插入图片描述

移动游标指针

可以通过cursor.scroll(position, mode=“relative | absolute”)方法,来设置相对位置游标和绝对位置游标
当mode=‘absolute’时,代表绝对移动,
value就代表移动的绝对位置,value=0就代表移动到位置0处,
就是结果集开头,
value=3就是移动到位置3处,也就是第4条记录处
mode缺省值为’relative’,代表相对移
当mode='relative’时,value就是移动的长度,
value>0向后移动(从位置0移动到位置2),
value<0向前移动(比如从位置2移动到位置0)

sqli = 'select * from hello;'
cur.execute(sqli)
print(cur.fetchmany(3))  ##获取3个查询结果集
# print('正在移动指针到最开始的地方....')

返回到要最开始的地方

print(cur.fetchmany(5))
print(cur.fetchone())
——————————————————————   ##已经将ID=20的所对应的结果都获取完毕,指针到末尾位置,此时获取下一个结果就是`cur.fetchone()`就是`None`
cur.scroll(0,'absolute')    ##让指针返回到最开始的地方
print(cur.fetchone())     ##此时再次获取,获取到20 

在这里插入图片描述

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值