python连接mysql的demo——pymysql
Posted hans774882968
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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注入。
结果
以上是关于python连接mysql的demo——pymysql的主要内容,如果未能解决你的问题,请参考以下文章