python连接mysql的demo——pymysql

前言:本来想用python做一个自动回复消息的bot,中间用到mysql数据库存储的数据。后来知难而退了,就退化成python连接mysql的练习了QAQ相信我,这篇blog不是复制粘贴的,比csdn那些复制粘贴的玩意要有诚意一些~

pip安装

pip install pymysql

我安装时没有踩坑。如果踩坑的话我也不知道怎么办qwq……

新建数据库jokes和表joke

安装mysql略。连接mysql:

mysql -u你的mysql用户名 -p

注意“-u”和用户名之间没空格。比如用户名root对应-uroot。然后根据提示输入密码。

接下来把这些代码复制到命令行运行。

-- https://www.51test.net/show/10267461.html
show databases;
create database jokes;
use jokes;

create table joke(
    jid int auto_increment,
    txt varchar(200),
    primary key(jid)
);

insert into joke (jid,txt) values (1,'一份立秋的祝福,传于你我之间,带着未退的热情,吸引四方视线,无论移动的电波,还是联通电信,只知道不管间隔多远,我们彼此心相连。立秋快乐!');

insert into joke (jid,txt) values (null,'天苍苍,野茫茫,秋风过境遍地黄;云淡淡,雨疏疏,一层秋雨一层凉;稻花谢,瓜果黄,累累硕果君来尝;秋空空,思长长,你的冷暖记心上。立秋快乐!');

insert into joke (jid,txt) values (null,'用轻松点燃紧张的空气,用晴朗点燃潮湿的心情,用时间点燃生命的灿烂,用祝福点燃幸福的快乐,拿起开心,祝你生日快乐!');

insert into joke (jid,txt) values (null,'将快乐化为美妙的音符,作为礼物,在那个特别的日子里送给你,愿你天天都有好心情,一生都幸福,平安,衷心地祝福你——生日快乐!');

insert into joke (jid,txt) values (null,'你知道我在想你吗?今天是你的生日,我在心里为你唱歌,发首短信祝福你:生日要快乐,脾气要随和,身体要健康,万事皆如意啊!');

insert into joke (jid,txt) values (null,'暖暖冬阳,带来我的思念;柔柔清风,送来我的祝福。最美好的愿望,我真挚的祝福,送给特别的你,衷心祝愿您生日快乐,天天快乐!');

确保以上命令运行完毕后,再运行python。python的demo如下:

import math
import os
import copy
import pymysql
import random

class Conn():
    def __init__(self,user,pwd,db_name):
        self.conn = pymysql.connect(
            host='localhost',
            user=user,
            password=pwd,
            db=db_name,
            charset='utf8',
            # autocommit=True,#如果插入数据,是否自动提交
        )
        # 游标对象用来给数据库发送sql语句,并执行
        self.cur = self.conn.cursor()
    
    def qry_all(self):
        num = self.cur.execute('select * from joke')
        print("数据条数:%s" % num)
        if not num: return None
        self.cur.scroll(0, 'absolute')#移动到游标最开始
        records = self.cur.fetchall()
        return records
    
    def qry_with_id(self,jid):
        #可以防止sql注入
        num = self.cur.execute('select * from joke where jid=%s',[jid])
        if not num: return None
        self.cur.scroll(0, 'absolute')#移动到游标最开始
        return self.cur.fetchone()
    
    def qry_with_keyword(self,kw):
        #like后面不加双引号,加了以后得不到结果。
        num = self.cur.execute('select * from joke where txt like %s',["%%%s%%" % kw])
        if not num: return None
        self.cur.scroll(0, 'absolute')#移动到游标最开始
        return self.cur.fetchall()
    
    def random_setence(self):
        num = self.cur.execute('select * from joke')
        if not num: return None
        self.cur.scroll(0, 'absolute')#移动到游标最开始
        records = self.cur.fetchall()
        obj = random.choice(records)
        sentence = obj[1]
        return sentence
    
    def __del__(self):
        self.cur.close()
        self.conn.close()

c = Conn('你的mysql用户名','你的mysql密码','jokes')
print(c.qry_all());print()

for _ in range(5):
    print(c.random_setence() + '\n')

print("根据id查询:")
record = c.qry_with_id(6)
if record:
    print(record);print()

print("根据关键字查询(%s):" % "生日")
record = c.qry_with_keyword("生日")
if record:
    print(record);print()

print("根据关键字查询(%s):" % "祝福")
record = c.qry_with_keyword("祝福")
if record:
    print(record);print()
  • 有光标的概念。目前没有发现应用光标的场景,因此每次都scroll到顶部。但是查询结果长度为0时会报错,因此判定长度num的语句要先于scroll的语句。
  • print出来发现返回结果是一个元组,不是一个对象。
  • execute可以防止sql注入。
  • like那儿不加双引号可以获得正确结果。并且目前我不清楚这么一个妥协的写法还能不能防止sql注入。

结果

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值