孤荷凌寒自学python第四十四天Python操作数据库之准备工作

(完整学习过程屏幕记录视频地址在文末,手写笔记在文末)

今天非常激动地开始接触Python的数据库操作的学习了,数据库是系统化设计中非常重要的部分,有了数据库才能保证所有的信息得以存储与交换。

今天了解到python可以操作的数据库非常丰富,从关系型数据库到非关系型数据库都提供了良好的支持。

就关系型数据库来说,从今天的初步学习中已经发现Python 可以非常方便的操作ACCESS本地数据库,SQLite本地数据库,msSQL数据服务,mySQL数据服务等。

当然要要想让Python顺利的操作数据库,必须得给Python所在的不同的操作系统安装相应的补充库和组件才行。

一、  Windows系统(windows10)下需要安装的相关组件与库

1

pymysql

这个组件是用来操作mySQL数据服务的,安装方法非常简单在windows的cmd命令行窗口中输入:

pip install pymysql

即可完成安装。

2

pypyodbc

这个组件是旧的用于操作所有数据库的中间组件,通过ODBC连接字符串来操作所有的数据库。安装方法 也很简单,在windows的cmd命令行窗口中输入:

pip install pypyodbc

即可完成安装。

3

pymssql

这个组件是用来操作msSQL数据服务的,尝试使用Pip命令行安装可能会失败,于是采用了下载安装的方法:

(1)     到下面的地址中去找到对应自己Python版本与windows10系统版本32位或64位相区别的对应pymssql插件:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql

找到符合当前操作系统的whl文件。

我安装的操作系统是windows1064位,Python版本是:3.6.5版,那么我找到的对应的whl文件就是:

pymssql‑2.1.4.dev5‑cp36‑cp36m‑win_amd64.whl

这个文件名中的【win_amd64】表示对应windows的64位操作系统;

这个文件名中的【cp36】表示对应于Python版本号为3.6.X;

(2)     将下载后的whl文件复制到Python安装目录的scripts文件夹下

怎么知道自己的python安装在哪儿的呢?在windows下cmd命令行中输入 :

where python

然后会得到 我的安装路径:

G:\w10_1\python\python365\python.exe

将这个whl文件复制到

G:\w10_1\python\python365\scripts\

文件夹下

(3)     然后打开windows的cmd命令行窗口,输入:

cd Python安装目录的scripts文件夹

再输入

pip install pymssql-xxxxx-xxx-xxx-xxx.whl

即可完成安装

我的输入如下:

C:\Users\pw>G:

G:\>cdG:\w10_1\python\python365\scripts\

G:\w10_1\python\python365\Scripts>pipinstall pymssql‑2.1.4.dev5‑cp36‑cp36m‑win_amd64.whl

4

sqlite3

sqlite是一个本地轻型数据库,安装好sqlite后,python中就已经有组件

sqlite3了。

(1)     到http://www.sqlite.org/下载sqlite3的压缩包:

根据windows版本的32位和64位的不同下载对应版本的压缩包,

我的windows10是64位版的,所以我下载的是:

sqlite-dll-win64-x64-3240000.zip

sqlite-tools-win32-x86-3240000.zip

(2)     将下载的两个压缩包解压

其中一个包中有两个文件:

sqlite3.def 和 sqlite3.dll

另一个包中有:

sqlite3.exe

一共三个文件。

(3)     在C盘新建一个文件夹,如:

C:\sqlite3\

然后将上面解压得到的三个文件本身复制到此文件夹中即可。

(4)     然后将文件夹【C:\sqlite3\】添加到windows的系统环境变量的Path目录中。

(5)     然后在cmd命令窗口中验证是否安装成功,输入:

sqlite3

如果出现版本信息等,说明安装已经成功,如我的测试结果:

G:\w10_1\python\python365\Scripts>sqlite3

SQLiteversion 3.24.0 2018-06-04 19:24:41

Enter".help" for usage hints.

Connectedto a transient in-memory database.

Use".open FILENAME" to reopen on a persistent database.

sqlite>

(6)     当然现在的sqlite还只能通过命令行操作,非常麻烦,于是可以安装一个可视化程序。

我安装了的是:

http://sqliteadmin.orbmu2k.de/

中下载的:

SQLite Administrator

但结果发现并不如网上介绍的那么好用。

二、  Linux系统(Fedora28)下需要安装的相关组件与库

然后我又在我的Fedora28系统下安装了同样的相关组件与库

1

pymysql

直接在Fedora的命令行终端中输入:

pip3 install pymysql

即可完成安装

2

pypyodbc

直接在Fedora的命令行终端中输入:

pip3 install pypyodbc

即可完成安装

3

pymssql

这个直接尝试使用pip进行安装失败了,于是先进行了很多组件的安装,整个安装过程的命令如下:

yum install python-devel python-setuptools

yum install freetds-devel

yum install python3-devel

yum install -y libffi-devel openssl-devel

pip3 install cython

pip3 installgit+https://github.com/pymssql/pymssql.git

pip3 install pymssql

pip install pymssql

到这时安装才终于完成,然而,当我打开ECLIPSE进行python测试的时候,却得到提示:pymssql没有安装。

这让人非常无所适从,因为在Fedora的终端中输入

pip list

进行检索时,列出安装的全部组件和库列表中,pymssql是存在的。

在反复尝试,绞尽脑汁与Fedora系统奋战了2个小时之后,发现了问题的根源——eclipse本身的设置有问题!有些问题就是这样,不得不让人感慨造化弄人!

现在找到了eclipse的设置方法如下 :

(1)     点击eclipse的windows菜单,点击它

(2)     在弹出的下拉子菜单中,点击“preferances”菜单项。

(3)     这时在出现的设置界面中在左边列表中点击“PyDev”项目

(4)     找到子项目列表中的“Interpreters”子项目,点击它

(5)     再点击子子项目列表中的“Python Interpreters”项目

(6)     此时设置界面的右边出现了很多选项卡,找到其中的Libraries选项卡,点击之。

(7)     此时检查列出的所有已添加在eclipse中的Python库位置引用列表

通过界面最右边的按钮【add new】将所有可能的Python库位置都添加其中

以我的Fedora系统为例,保证有以下列表项:

/usr/lib64/python3.6

/usr/lib64/python3.6/lib-dynload

/usr/lib64/python3.6/site-packages

/usr/lib/python3.6/site-packages

/usr/local/lib64/python3.6/site-packages

/usr/local/lib/python3.6/site-packages

通过此方法就完全完成了pymssql的安装。

4

sqlite3

在Fedora中安装sqlite3非常简单,执行以下两个操作,即可完成安装并得到了一个可视化界面操作程序。

sudo yum install sqlite

sudo yum install sqlitebrowser

而且个人觉得Fedora系统下的这个可视化sqlite3操作程序非常好用。

三、  验证各个组件是否能够正确工作

(一)  pypyodbc模块

此模块已经不被推荐使用,虽然它可以全面的连接任意数据库,但实际上是要操作系统支持才行的。比如我在Fedora系统中,尝试使用ODBC字符串连接网络MSSQL服务器就遭遇失败,因为还没有在Fedora系统中配置好微软的ODBC和mssql的驱动。同样的在Fedora中尝试使用ODBC字符串连接ACCESS数据库也是失败。

pypyodbc通过不同的连接字符串来连接不同的数据库,统一格式如下:

数据库连接对象con=pypyodbc.connect(odbc连接字符串)

其中ODBC连接字符串针对不同的数据库如下(我已学习到的有两种)

1. ACCESS数据库

Driver={Microsoft Access Driver(*.mdb, *.accdb)};DBQ=数据库文件完整路径文件名;Pwd=加密文件的密码

特别注意,数据库文件的完整路径文件名的总字符数不要超过255个字符,否则就会造成溢出错误,无法读取这个MDB或ACCDB文件了。

2. MSSQL数据库

DRIVER={SQL Server};SERVER=MSSQL服务器地址;DATABASE=数据库名称;UID=用户名;PWD=用户密码

首先测试了一下ACCESS数据库

先是没有密码来加密保护的ACCESS数据库

importpypyodbc

accdb1 =r'Driver={MicrosoftAccess Driver (*.mdb, *.accdb)};DBQ=I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0044第四十四天连接网络数据库\_\Database2.accdb'

conn =pypyodbc.connect(accdb1)

cur =conn.cursor()

cur.execute("SELECT* FROM m;") # 一段可执行的SQL语句

list0 =cur.fetchall()

print(list(list0))

conn.close()

这个测试有时可以成功读取中表的内容,但有时又会出现以下错误(极不稳定):

pypyodbc.Error: ('HY000', '[HY000] [Microsoft][ODBCMicrosoft Access Driver]常见错误 无法打开注册表项“Temporary (volatile) Ace DSN for process 0x1d78 Thread 0x123c DB C0x3ed800b8

至于操作Access数据库不稳定的原因,没有找到准确的解决方案。

在Fedora系统中因为没有配置好ACCESS的驱动 ,是完全不成功的。

下面测试了有密码保护的ACESS数据库的访问

importpypyodbc

accdb1 =r'Driver={MicrosoftAccess Driver (*.mdb, *.accdb)};DBQ=I:\MAKEAPP\python\Python365\边学习边测试文件夹\自学PYTHON部分\0044第四十四天连接网络数据库\_\Database1.accdb;Pwd=孤荷凌寒的密码'

conn =pypyodbc.connect(accdb1)

cur =conn.cursor()

cur.execute("SELECT* FROM m;") # 一段可执行的SQL语句

list0 =cur.fetchall()

print(list(list0))

正常运行的结果是:

[(1,'张三', '女', '没有信息', 36), (2, '孤荷凌寒', '男', '没有', 28)]

然后测试了一下mssql数据库

importpypyodbc

from time import sleep

def db_connect():

# 打开数据库连接

#MSSQL数据库中的字段如果是文本请使用nchar和nvchar而不要使用vchar和text,否则就是乱码

db=pypyodbc.connect('DRIVER={SQLServer};SERVER=xxxxx.xxxxx.com;DATABASE=孤荷凌寒的MSSQL数据库;UID=孤荷凌寒;PWD=孤荷凌寒的密码')

# 使用cursor()方法创建一个游标对象cursor

cursor = db.cursor()

# 使用execute()方法执行SQL查询

cursor.execute("SELECT * FROMdbo.m;") #直接用表名 m 也可以的

# 使用 fetchone() 方法获取单条数据

data = cursor.fetchone()

print ("第一条数据如下: " ,data[0],data[1],data[2],data[3])

# 关闭数据库连接

db.close()

def main():

db_connect()

if __name__ == "__main__":

main()

运行结果:

第一条数据如下:  孤荷凌寒 男 没有定稿 36

在设计MSSQL时要注意:MSSQL数据库中的数据表的字段如果是文本请使用nchar和nvchar而不要使用vchar和text,否则就是乱码

 

(二)  pymysql模块

得到连接对象的方法:

数据库连接对象con=pymysql.connect("mysql服务器地址","sql服务器用户名", "用户登录密码", "数据库名")

测试如下:

import pymysql

def db_connect():

# 打开数据库连接

db = pymysql.connect("localhost", "root", "abc123", "mysql")

# 使用cursor()方法创建一个游标对象cursor

cursor = db.cursor()

# 使用execute()方法执行SQL查询

cursor.execute("SELECT * FROMm;")

# 使用 fetchone() 方法获取单条数据

data = cursor.fetchall()

print (list(data))

# 关闭数据库连接

db.close()

def main():

db_connect()

if __name__ == "__main__":

main()

运行结果如下:

[(1,'张三', '女', '没有信息', 36), (2, '孤荷凌寒', '男', '没有', 35)]

(三)  pymssql模块

得到连接对象的方法:

数据库连接对象con=pymssql.connect("mssql服务器地址","sql服务器用户名", "用户登录密码", "数据库名"[,charset=’utf8’])

可选参数

charset=’utf8’

注意

utf8

中间没有连接符 –

当然实际上此可选参数没有起到多大的作用,对于mssql来说,还是得在设计时:对于文本类型的字段使用nchar和nvchar而不要使用vchar和text类型,否则照样是乱码。

测试如下:

import pymssql

def db_connect():

# 打开数据库连接

#MSSQL数据库中的字段如果是文本请使用nchar和nvchar而不要使用vchar和text,否则就是乱码

db = pymssql.connect("xxxxx.xxx.com", "孤荷凌寒", "孤荷凌寒的mssql登录密码", "孤荷凌寒的mssql数据库名",charset='utf8')

# 使用cursor()方法创建一个游标对象cursor

cursor = db.cursor()

# 使用execute()方法执行SQL查询

cursor.execute("SELECT * FROMdbo.m;") #直接用表名 m 也可以的

# 使用 fetchone() 方法获取单条数据

data = cursor.fetchone()

print ("第一条记录是 : " ,data[0],data[1],data[2],data[3])

# 关闭数据库连接

db.close()

def main():

db_connect()

if __name__ == "__main__":

main()

运行结果:

第一条记录是:  孤荷凌寒 男 没有定稿 36

使用pymssql模块在windows下和Fedora下均被测试通过。

(四)  sqlite3模块

得到连接对象的方法:

数据库连接对象con=sqlite3.connect(r"sqlite数据库文件的完整路径和文件名")

特别注意,sqlite数据库文件的完整路径文件名的总字符数不要超过255个字符,否则就会造成溢出错误,无法读取这个DB或S3DB文件了。

与前面的所有连接对象不同,sqlite3的连接对象本身就有【execute()】方法。

但一般情况下,仍然通过cursor游标对象来执行execute()方法。

测试如下:

import sqlite3

try:

con=sqlite3.connect(r'C:\ProgramData\SQLITE3\slone.s3db')

#con.execute('select* from student;') #和Pymssql和pymysql不同,sqlite3的con有execute()方法

cur=con.cursor()

cur.execute('select * from m;')

data=cur.fetchall()

print(list(data))

con.close()

except:

print('出错了')

执行结果如下:

[(1,'张三', '女', '没有信息', 36), (2, '孤荷凌寒', '男', '没有', 35)]

在Fedora下也能测试成功,但指定的文件路径不同。

四、  小结今天学到的python数据库操作知识

1. 不管通过什么模块连接什么数据库,都是先得到一个【数据库连接对象】

2. 然后通过【数据库连接对象】得到【游标对象】,方法是:

游标对象=数据库连接对象.cursor()

游标即cursor,Python数据库的主要操作都在游标对象中。

3. 今天学到的游标对象的三个主要方法

(1)

游标对象.execute()

执行sql语句,sql语句是关系数据库通用的数据库操作语句,有庞大的体系,我之前学习过其它编程语言,对关系数据库操作的SQL语句已有全面了解,若是新学习的同学者建议专门购书学习SQL语句。

(2)

数据表对象=游标对象. fetchall()

从SQL语句返回的查询结果中得到所有数据库表记录的一个数据表对象(我的个人理解,对这个得到的数据对象目前没有深入学习),这个数据对象中包含了多条记录。

(3)

数据表对象=游标对象. fetchone()

只取回一条记录。

4. 数据库连接对象在使用完成后一定要关闭

关闭(断开)与数据库连接的方法是:

数据库连接对象.close()

——————————

今天整理的学习笔记完成,最后例行说明下我的自学思路:

根据过去多年我自学各种编程语言的经历,认为只有真正体验式,解决实际问题式的学习才会有真正的效果,即让学习实际发生。在2004年的时候我开始在一个乡村小学自学电脑 并学习vb6编程语言,没有学习同伴,也没有高师在上,甚至电脑都是孤岛(乡村那时还没有网络),有的只是一本旧书,在痛苦的自学摸索中,我找到适应自己零基础的学习方法:首先是每读书的一小节就作相应的手写笔记,第二步就是上机测试每一个笔记内容是否实现,其中会发现书中讲的其实有出入或错误,第三步就是在上机测试之后,将笔记改为电子版,形成最终的修订好的正确无误的学习笔记。

通过反复尝试错误,在那个没有分享与交流的黑暗时期我摸黑学会了VB6,尔后接触了其它语言,也曾听过付费视频课程,结果发现也许自己学历果然太低,就算是零基础的入门课程,其实也难以跟上进度,讲师的教学多数出现对初学者的实际情况并不了解的情况,况且学习者的个体也存在差异呢?当然更可怕的是收费课程的价格往往是自己难以承受的。

于是我的所有编程学习都改为了自学,继续自己的三步学习笔记法的学习之路。

当然自学的最大问题是会走那么多的弯路,没有导师直接输入式的教学来得直接,好在网络给我们带来无限搜索的机会,大家在网络上的学习日志带给我们共享交流的机会,而QQ群等交流平台、网络社区的成立,我们可以一起自学,互相批评交流,也可以获得更有效,更自主的自学成果。

于是我以人生已过半的年龄,决定继续我的编程自学之路,开始学习python,只希望与大家共同交流,一个人的独行是可怕的,只有一群人的共同前进才是有希望的。

诚挚期待您的交流分享批评指点!欢迎联系我加入从零开始的自学联盟。

这个时代互联网成为了一种基础设施的存在,于是本来在孤独学习之路上的我们变得不再孤独,因为网络就是一个新的客厅,我们时刻都可以进行沙龙活动。

非常乐意能与大家一起交流自己自学心得和发现,更希望大家能够对我学习过程中的错误给予指点——是的,这样我就能有许多免费的高师了——这也是分享时代,社区时代带来的好福利,我相信大家会的,是吧!

根据完全共享的精神,开源互助的理念,我的个人自学录制过程是全部按4K高清视频录制的,从手写笔记到验证手写笔记的上机操作过程全程录制,但因为4K高清文件太大均超过5G以上,所以无法上传至网络,如有需要可联系我QQ578652607对传,乐意分享。上传分享到百度网盘的只是压缩后的720P的视频。

我的学习过程录像百度盘地址分享如下:(清晰度:1280x720)

链接:https://pan.baidu.com/s/1EJUbOEtFOlqIj0IgyznD7g

提取码:hyv0

Bilibili:

https://www.bilibili.com/video/av38091838/

喜马拉雅语音笔记:

https://www.ximalaya.com/keji/19103006/146513197

孤荷凌寒自学python第四十四天Python操作 数据库之准备工作的更多相关文章

  1. 孤荷凌寒自学python第八十四天搭建jTessBoxEditor来训练tesseract模块

    孤荷凌寒自学python第八十四天搭建jTessBoxEditor来训练tesseract模块 (完整学习过程屏幕记录视频地址在文末) 由于本身tesseract模块针对普通的验证码图片的识别率并不高 ...

  2. 孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4

    孤荷凌寒自学python第七十四天开始写Python的第一个爬虫4 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 直接上代码.详细过程见文末屏幕录像 ...

  3. 孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3

    孤荷凌寒自学python第六十四天学习mongoDB的基本操作并进行简单封装3 (完整学习过程屏幕记录视频地址在文末) 今天是学习mongoDB数据库的第十天. 今天继续学习mongoDB的简单操作, ...

  4. 孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档

    孤荷凌寒自学python第五十四天使用python来删除Firebase数据库中的文档 (完整学习过程屏幕记录视频地址在文末) 今天继续研究Firebase数据库,利用google免费提供的这个数据库 ...

  5. 孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数

    孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 不同类型 ...

  6. 孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成

    孤荷凌寒自学python第四十八天通用同一数据库中复制数据表函数最终完成 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天经过反复折腾,最终基本上算 ...

  7. 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数

    孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...

  8. 孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类尝试第一天

     孤荷凌寒自学python第四十六天开始建构自己用起来更顺手一点的Python模块与类,尝试第一天 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 按上一天的规划,这是根据过去我自学其它编程语 ...

  9. 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备

     孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...

随机推荐

  1. ELF文件中section与segment的区别

    http://blog.csdn.net/joker0910/article/details/7655606 1. ELF中的section主要提供给Linker使用, 而segment提供给Load ...

  2. ABI与编译器:ABI是由内核和工具链定义和实现的

    http://book.51cto.com/art/201412/460857.htm <Linux系统编程(第2版)>第1章入门和基本概念,这一章着眼于Linux系统编程的基础概念并从程 ...

  3. Poj(2312),坦克大战,BFS的变形

    题目链接:http://poj.org/problem?id=2312 挺有趣的一道题目,然而很容易WA,我就WA了一次,虽然我Debug的时候已经知道哪里出问题了,就是比如说我搜到B和E时,从B搜第 ...

  4. 二叉树遍历,先序序列+中序序列=后序序列,Poj(2255)

    这里我参考了JHF大神的写法啦,直接把输出写在了建树的过程中了. 思路: 先根据先序序列找到根节点,在找该节点在中序序列中的位置,这样,左右子树有分开了.这里的细节值得注意一下,不然很容易建树出错.( ...

  5. 简单介绍Spring是什么?

    对于面试者回答什么是Spring,这个问题占6分分值,分值点分布:1.Spring的核心是一个轻量级(Lightweight)的容器(Container).2.Spring是实现IoC(Inversi ...

  6. ES6初识-(冲突)数据结构

    Set的用法 元素不能重复--唯一性 WeakSet key值只能是对象 没有clear属性 Map let map=new Map([['a',123],['b',456]]);; WeakMap ...

  7. 远程桌面连接失败,提示CredSSP加密Oracel修正问题解决

    今天远程桌面的时候失败了,出现以下提示 于是上网找解决办法,经过测试,该方法是可行的. 首先,在控制台中输入regedit,打开注册表

  8. React路由-进阶篇

    路由进阶 1.多级路由,和之前的思想一样,在子路由里面继续写Route,继续挂载组件,就可以实现多级路由 比如这样:class Food extends Component{ render() { r ...

  9. C语言真正的编译过程(4个步骤~~预编译,编译,汇编,连接)

    转载自:https://www.cnblogs.com/wuyouxiaocai/p/5701088.html#commentform 说实话,很多人做了很久的C/C++,也用了很多IDE,但是对于可 ...

  10. 操作视频-对视频进行canny边缘检测

    #include<opencv2/opencv.hpp> using namespace cv; int main() { VideoCapture capture(); //从摄像头读入 ...