Py学习  »  DATABASE

Python3操作三大数据库(三)之Mysql(3):使用Python3连接mysql进行简单的增删改查

啃饼小白 • 5 年前 • 505 次点击  

写在前面

本篇笔记就开始使用Python3来操作我们的数据库了,内容不是很多,但是都是基础知识。

搭建虚拟环境

virtualenv的安装和配置

使用虚拟环境的好处

我们希望每个应用都有属于自己的一套独立Python运行环境,这样可以不被其他应用所影响。virtualenv就是用来为一个应用创建一套隔离的Python运行环境,它很好的解决了各种包的管理和升级问题,使开发具有很大的自由性。

安装pip

我们同样需要在Python的官网上去下载,下载完成之后,解压到一个文件夹(记住要和Python放在同一目录下),采用添加环境变量的方法(我的电脑,右键-->属性,单击-->高级系统环境设置,单击-->高级,单击-->环境变量,单击-->系统变量下的Path),我们在PATH最后添加上Python中的scripts的地址,再用CMD控制台进入解压目录(举个例子:你当前在C盘要进入F盘只需要输入F:,回车即可。cd用于进入子目录,比如)进入F盘下的Python目录, 只需输入cd Python回车即可,cd与Python之间空一格

C:\Users\YC-Jiang>F:
F:>cd Python
F:\Python>cd pystall
F:\Python\pystall>

然后输入:python setup.py install回车,等待几分钟即可。

最后,确认你的 pip 是否成功安装,在命令行输入 cmd ( windows 桌⾯面–>快速启动–>附件
–>cmd,看到以管理员身份运行类似的话,点击确定)或者Windows徽标+R中输入

pip -—version

小白请注意:需要输入空格,注意有两条-,注意需要直接在命令行执行而不是输入
python 之后再执行(这一段中文是写给你的提醒,不是你要敲到终端里执行的语句)

如果已经成功安装 pip,会提示类似下面的:

pip 1.5.6 from C:\Python35\lib\site-packages\pip-1.5.6-py3.5.egg

pip 后面的数字是版本号,from后面的是pip的安装路径,具体的版本号和路径是什么
每个人都会不同,但只要电脑返回类似这样的提示就说明 pip 安装成功了。

如果你的电脑没有返回类似上的提示,而是有报错提示你 pip 没有被定义,请参考
这个方法为你的 Windows电脑安装pip: pip安装问题

安装virtualenv

在终端输入以下命令:

pip install virtualenv 
virtualenv testvir  # 在当前用户目录(win+r %HOMEPATH%可查看)生成
cd %homepath%
cd testvir
cd Scripts
activate.bat  # 激活
pip list 
deactivate.bat

其实这种方法挺麻烦的,这里我推荐一种简单方法,安装virtualenvwrapper

安装virtualenvwrapper

在终端输入如下命令:

pip install virtualenvwrapper-win

接下来便是创建虚拟环境了,同样采用如下命令:

mkvirtualenv flaskTest  # flaskTest为你新建虚拟环境的名称

它会创建在C:\Users\YC\Envs当前用户目录下的Envs目录。

你可以自定义修改mkvirtualenv创建的目录:新增环境变量WORKON_HOME

image

退出激活状态命令

deactivate

知道有哪些虚拟环境命令

workon

直接进入虚拟环境命令

workon flaskTest

如果出现这种情况,表示你已经进入到虚拟环境中。

F:\Envs\flaskTest

再次说明,出现前面的(flaskTest)就代表进入了虚拟环境,之后就可以进行包和库的安装了。

安装mysql-client

1、点击这里,然后按住Ctrl+F键,调出搜索框,在里面输入mysqlclient,然后回车即可,因为我的电脑是64位,所以下载64位的。

上面的cp36代表Python3.6的版本,cp37代表Python3.7 的版本!

2、将下载好的mysqlclient放置到虚拟环境flaskTest里面:


3、在虚拟环境中安装mysqlclient,如图所示:

C:\Users\YC>F:

F:\>cd Envs    

F:\Envs>workon flaskTest
(flaskTest) F:\Envs>cd flaskTest# 必须进入到你的项目中才能开始安装,否则会出错

(flaskTest) F:\Envs\flaskTest>pip install mysqlclient-1.3.13-cp36-cp36m-win_amd64.whl
Processing f:\envs\flaskTest\mysqlclient-1.3.13-cp36-cp36m-win_amd64.whl
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.13

(flaskTest) F:\Envs\flaskTest>

4、测试一下看mysqldb是否可以正常使用:

(flaskTest) F:\Envs\flaskTest>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>>

上面的代码就是正常的显示结果。
考虑到Python3.0已经不支持MySQLdb,所以我这边采用pymysql(mysql.connector也是可以),但是之前的mysqlclient还是要安装的。

安装pymysql

在刚才的虚拟环境输入pip install pymysql进行安装即可。再测试一下看pymysql是否可以正常使用:

(flaskTest) F:\Envs\flaskTest>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymysql
>>>

接下来是利用python来实现与mysql数据库的连接和获取数据。

数据库的连接和简单获取数据

在之前的虚拟环境下面新建ceshi.py文件,里面写上如下代码:

#encoding:utf-8

import pymysql

# 简单的连接
# 获取连接
conn = pymysql.connect(
    host = '127.0.0.5',
    user = 'root',
    password = 'root',
    db = 'news',
    port = 3306,
    charset = 'utf8'
)

# 获取数据
cursor = conn.cursor()
cursor.execute('select * from news order by created_at desc')
rest = cursor.fetchone()
print(rest)

然后在虚拟环境下运行这个py文件:

(flaskTest) F:\Envs\flaskTest>python ceshi.py
(1, '少林寺回应升国旗仪式:是爱国爱教表现', '新闻内容', '推荐', 'http://n.sinaimg.cn/news/transform/162/w550h412/20180827/J7Mb-hifuvph7236291.jpg', None, 0, None, 1)

(flaskTest) F:\Envs\flaskTest>

和数据库里面的数据一模一样,但是这里只显示一条。

# 关闭连接
conn.close()

对前面的连接进行异常捕获处理


import pymysql


# 获取连接
try:
    conn = pymysql.connect(
        host='127.0.0.5',
        user='root',
        password='root',
        db='news',
        port=3306,
        charset='utf8'
    )

    # 获取数据
    cursor = conn.cursor()
    cursor.execute('select * from news')
    rows = cursor.fetchall()
    print(cursor.description)

    for row in rows:
        print(row)

    # 关闭连接
    conn.close()
except pymysql.Error as e:
    print('mysql error:%s' % e)

数据库的封装

import pymysql


class PyMysqlConnect(object):

    # 初始化
    def __init__(self, host='127.0.0.5', port=3306, user='root', password='root', db='news', charset='utf8'):
        self._host = host
        self._port = port
        self._user = user
        self._password = password
        self._db = db
        self._charset = charset
        self._conn = None
        self._cursor = None
        self.get_conn()

    # 关闭数据库连接
    def close(self):
        if self._cursor:
            self._cursor.close()
            self._cursor = None

        if self._conn:
            self._conn.close()
            self._conn = None

    def commit(self):
        self._conn.commit()

    # 获取数据库连接
    def get_conn(self):
        try:
            self._conn = pymysql.connect(
                host=self._host,
                user=self._user,
                password=self._password,
                db=self._db,
                port=self._port,
                charset=self._charset
            )

            self._cursor = self._conn.cursor()
        except pymysql.Error as e:
            print('mysql error:%s' % e)

    # 获取单条新闻
    def get_one(self):

        sql = 'select * from news where types = %s order by created_at desc'
        # 获取数据
        self._cursor.execute(sql,('百家',))
        rest = dict(zip([k[0] for k in self._cursor.description], self._cursor.fetchone()))  # 字典

        # 关闭连接
        self.close()
        return rest

    # 获取多条新闻
    def get_more(self):

        sql = 'select * from news where types = %s order by created_at desc'
        # 获取数据
        self._cursor.execute(sql,('百家',))
        rest = [dict(zip([k[0] for k in self._cursor.description], row))  # 列表
        for row in self._cursor.fetchall()]

        # 关闭连接
        self.close()
        return rest
# 增加数据库数据
    def add_one(self):
        try:
            sql = 'insert into news(title,image,content,types,is_valid) values(%s, %s, %s, %s, %s)'
            self._cursor.execute(sql, ('标题3', '/static/img/news/03.png', '新闻内容3', '推荐', 1))
            self.commit()  # 提交保存
            self.close()
        except:
            print('error')


def main():
    obj = PyMysqlConnect()
    # rst = obj.get_more()
    # rst = obj.get_one()
    # print(rst)
    obj.add_one()


if __name__ == "__main__":
    main()

至此,我们本篇关于数据库的连接操作就到此为止了,下一篇将介绍ORM相关的内容,感谢你的赏阅!


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/23514
 
505 次点击