好久没记录了,这段时间颓废了啊。
进度缓慢。得抓紧咯~
这两天又说要做spring boot
我滴个乖乖,我从来没有接触过啊。。
慢慢来吧。提高自己的泛用性。
一、基础操作
pycharm 其实对数据库操作的工作就两部分。
只争朝夕,pycharm 是只管朝夕
朝:
from pymysql import *
conn = connect(host='localhost',port=3306,user='root',passwd='设置的密码',db='数据库名称',charset='utf8')
cursor = conn.cursor()
夕:
conn.commit() (查询不需要提交)
cursor.close()
conn.close()
至于中间你想干啥,随你咯(滑稽)
sqlstr = ‘你想干的事儿’
cursor.execute(sqlstr)
基础操作到此结束。
基础操作遇到的问题
Q1:关于新建数据库
A1:安装好mysql后,配置其bin目录到用户环境变量PATH中
打开命令行,利用如下代码进行数据库建立
#进入mysql
mysql -uroot -p
输入安装mysql时候的root密码
#建立数据库
create database 数据库名称 charset='utf8';
Q2:咋安装pymysql?
Q3:命令行 pip install pymysql 就可以了,想看看自己都安装了什么插件,pip list 就可以看到了
Q3:import pymysql这句话出错了啊?
A3:因为我升级python3.63到python3.64了(竟然不覆盖,两个版本共存了),所以导致识别不了安装的pymysql,在pycharm中File/Setting中搜索project interpreter,把编译器版本选择对了就会出现插件列表,当然不用pip安装pymysql也是可以的用,插件列表右上角有 “+” 利用它也可以安装的。
二、改善——参数化
如果访问数据库的时候将参数写在sql中,就容易收到数据库攻击(sql注入),如:
select * from students where name = ”
传来的参数为 a’ or 1=1 or ’
拼接后为:
select * from students where name = ‘a’ or 1=1 or ”
那where还有意义么?
为了让sql语句执行更加安全,我们就要进行参数化操作。
sqlstr = ‘select * from students where name = %s’
params = [sname]
result = cursor.execute(sqlstr,params)
这样安全地得到了同样的结果。
二、封装
每次操作都需要朝夕,那我们就要进行封装,提高程序的复用率。
from pymysql import *
class MysqlHelper:
def __init__(self, host, port, db, user, passwd, charset='utf8'):
self.host = host
self.port = port
self.db = db
self.user = user
self.passwd = passwd
self.charset = charset
def open(self):
self.conn = connect(host=self.host,
port=self.port,
user=self.user,
passwd=self.passwd,
db=self.db,
charset=self.charset)
self.cursor = self.conn.cursor()
def close(self):
self.cursor.close()
self.conn.close()
def cud(self, sql, params):
try:
self.open()
self.cursor.execute(sql, params)
self.conn.commit()
self.close()
except Exception as e:
print(e)
def all(self, sql, params=[]):
try:
self.open()
self.cursor.execute(sql, params)
result = self.cursor.fetchall()
self.close()
return result
except Exception as e:
print(e)
查看以上代码,我们只需要进行cud与all的调用就可以获得想要的结果。
面向对象,就是把事务交给某个对象去做,不关心他内部是如何实现的。(当然如果这个对象要自己构造的话,那必须的明白其中的道理)
调用过程:
name = input("请输入账户:")
params = [name]
sql = 'select * from users where name = %s'
helper = MysqlHelper('localhost', 3306, 'users', 'root', '密码')
result = helper.all(sql, params)