社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

啃饼小白 • 6 年前 • 550 次点击  

写在前面

本篇笔记就开始使用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
 
550 次点击