我是靠谱客的博主 尊敬电话,这篇文章主要介绍文盲的Python入门日记:第二天,连接到mssql和python代码书写初体验,现在分享给大家,希望可以做个参考。

 

文盲的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
14
import 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里的一个可执行文件啊。。。那没事了

复制代码
1
Traceback (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
4
cursor = conn.cursor(); cursor.execute('select * from 我是用户表君') dt = cursor.fetchall() print(dt)

哦豁,打印出来不少东西,问题。。。怎么还有乱码?网络上一查。。。。全是各种对单独数据的编码解码。。。。额。。。。先不管他们,看看自己的数据库是啥情况

复制代码
1
2
3
4
5
6
7
8
SELECT COLLATIONPROPERTY('chinese_prc_ci_as','codepage') ------------------------------------------ 936 (1 行受影响)

我才注意到,原来我的数据库居然是936,也就是gbk编码??行吧,先不管乱码问题,我字段名呢?

复制代码
1
2
3
4
5
6
7
8
9
10
11
cursor = 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
26
import 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代码书写初体验的全部内容,更多相关文盲内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部