文盲的Python入门日记:第一天,Python环境搭建
文盲的Python入门日记:第二天,连接到mssql和python代码书写初体验
文盲的Python入门日记:第三天,用一些小练习感受一下python的不同
文盲的Python入门日记:第四天,用一个小练习来熟悉一下python的列表和其他语言数组的不同,以及Python的正则
文盲的Python入门日记:第五天,搭建一个python调试环境,以及初步探索pymssql的使用
文盲的Python入门日记:第六天,继续完善我们的MsSql类,支持查询结果的筛选和排序,以及日期类型
-----------------------------------------------------------------------------
在实际工作中,不管是app,web,桌面程序,或者其他什么类型的应用,在没有数据库支持的情况下,很难做到应用的扩展,增加更广,更深的挖掘,所以,咱们也先不管其他教程怎么说了,先连接到数据库才是正经,毕竟咱也不是啥纯新人,只是不懂Python罢了
还是百度,嗯,很简单,https://www.cnblogs.com/baiyangcao/p/pymssql_basic.html各种文章说的都很细致了。实际来测一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14import io import sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8') print("Content-Type: text/htmln") print('<meta charset="UTF-8" />') import pymssql conn = pymssql.connect('我是服务器君','我就是账号君','我就是密码君','我是数据库君') cursor = conn.cursor(); dt = cursor.execute('select * from 我是用户表君').fetchall(); print(dt); Traceback (most recent call last): File "D:****sitepy2.py", line 7, in import pymssql ModuleNotFoundError: No module named 'pymssql'
嗯。。。。居然提示没有pymssql这个包,百度下,说是 pip install pymssql就好,很简单嘛,结果进入到python会话窗口中一打这个命令。。。报错?
哦哦,pip是python文件夹下scripts里的一个可执行文件啊。。。那没事了
1Traceback (most recent call last): File "D:****sitepy2.py", line 10, in dt = cursor.execute('select * from 我是用户表君').fetchall(); AttributeError: 'NoneType' object has no attribute 'fetchall'
又报错???感谢度娘,伴我同行。仔细看了看别人的代码。。。
fetchall是cursor的方法。。。execute后不能直接跟fetchall。。。好吧。。。
1
2
3
4cursor = conn.cursor(); cursor.execute('select * from 我是用户表君') dt = cursor.fetchall() print(dt)
哦豁,打印出来不少东西,问题。。。怎么还有乱码?网络上一查。。。。全是各种对单独数据的编码解码。。。。额。。。。先不管他们,看看自己的数据库是啥情况
1
2
3
4
5
6
7
8SELECT COLLATIONPROPERTY('chinese_prc_ci_as','codepage') ------------------------------------------ 936 (1 行受影响)
我才注意到,原来我的数据库居然是936,也就是gbk编码??行吧,先不管乱码问题,我字段名呢?
1
2
3
4
5
6
7
8
9
10
11cursor = conn.cursor(); cursor.execute('select * from 我是用户表君') dt = cursor.fetchall() print('dt is list:',isinstance(dt,list)) for row in dt: print('row is tuple:',isinstance(row,tuple)) for val in row: if isinstance(val,str): print(val.encode('latin-1').decode('gbk')) else: print(val)
嗯,用type(dt),打印出来的是空字符串,什么都没有显示,暂时不知道为什么,先用isinstance过度下,毕竟刚开始学嘛,有缺陷很正常。
在以上代码的编写过程中,有了几个很新奇和不习惯的体验
1、代码缩进问题,这个问题还好,本身我已经养成缩进的习惯了,这个要求对以前那些自由奔放书写代码的人就是个大问题咯,毕竟以前看他们的代码,会逼死我这样的强迫症的
2、流程控制语句,在python里取消了大括号的方式,用缩进来表示为同一代码段,问题来了,流程控制语句后边必须跟一个冒号来结束,hmmmmm,不太习惯
3、暂时不知道有没有代码段名称定义以及goto,记下,以后验证
4、语句末尾的分号可有可无,不影响代码执行,这个和js一样了,不像c#,少个分号编译就过不去了
5、python可以继续用.命令来操作,暂时不知道有哪些范围可以用,比如自定义类型及方法,以后验证
6、至少有部分指令执行时不支持.命令叠加的,比如cursor.execute和cursor.fetchall就是同级的,这个对老顾不太友好,不明白为什么是这么设计的,难道不应该执行后返回一个列表嘛?就算不返回列表,游标执行完命令,不应该返回游标本身来支持.命令叠加吗?
7,由于数据库读取方式不同,字段名我找不到了?dt是list,row是tuple,搁c#,这类型就是List<Tuple>了,字段名呢?居然又要用cursor.description来获取?
先琢磨琢磨,按照自己的习惯输出一下结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26import io import sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8') print("Content-Type: text/htmln") print('<meta charset="UTF-8" />') print('<pre>') import pymssql conn = pymssql.connect('我是服务器君','我就是账号君','我就是密码君','我是数据库君') cursor = conn.cursor(); dt = cursor.execute('select * from 我是用户表君').fetchall(); col = cursor.description #print(col) dt = cursor.fetchall() datatable=[] for row in dt: idx=0; datatable.append({}) for val in row: d_val = val; if isinstance(val,str): d_val=val.encode('latin-1').decode('gbk') datatable[-1][col[idx][0]]=d_val idx+=1 conn.close() print(datatable)
嗯,这看起来舒服多了,还是个标准的json格式,不过居然取消了++运算,只能用+=了
最后
以上就是尊敬电话最近收集整理的关于文盲的Python入门日记:第二天,连接到mssql和python代码书写初体验的全部内容,更多相关文盲内容请搜索靠谱客的其他文章。
发表评论 取消回复