zoukankan      html  css  js  c++  java
  • 孤荷凌寒自学python第四十四天Python操作 数据库之准备工作

     孤荷凌寒自学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_1pythonpython365python.exe

    将这个whl文件复制到

    G:w10_1pythonpython365scripts

    文件夹下

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

    cd Python安装目录的scripts文件夹

    再输入

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

    即可完成安装

    我的输入如下:

    C:Userspw>G:

    G:>cdG:w10_1pythonpython365scripts

    G:w10_1pythonpython365Scripts>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_1pythonpython365Scripts>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:MAKEAPPpythonPython365边学习边测试文件夹自学PYTHON部分044第四十四天连接网络数据库\_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:MAKEAPPpythonPython365边学习边测试文件夹自学PYTHON部分044第四十四天连接网络数据库\_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:ProgramDataSQLITE3slone.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


    图片

    图片

    图片

    图片

    欢迎大家添加我为好友: QQ: 578652607
  • 相关阅读:
    Java读取文件方法和给文件追加内容
    Java中String类的format方法使用总结
    Java时间戳与日期格式字符串的互转
    Eclipse遇到Initializing Java Tooling解决办法
    CSS的总结(选择器,伪类等...)
    Redis中的关系查询(范围查询,模糊查询等...)
    Redis中文显示为Unicode编码的解决办法
    用bash命令得到Windows一个目录下的所有文件并且把结果输入到一个文件
    MapReduce按照两个字段对数据进行排序
    Scala中的抽象类
  • 原文地址:https://www.cnblogs.com/lhghroom/p/10159064.html
Copyright © 2011-2022 走看看