Python学习笔记——pycharm对mySQL的操作

好久没记录了,这段时间颓废了啊。
进度缓慢。得抓紧咯~
这两天又说要做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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值