写在前面
本篇笔记就开始使用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
退出激活状态命令
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相关的内容,感谢你的赏阅!