我是靠谱客的博主 尊敬电话,最近开发中收集的这篇文章主要介绍文盲的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各种文章说的都很细致了。实际来测一下

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

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。。。好吧。。。

cursor = conn.cursor();
cursor.execute('select * from 我是用户表君')
dt = cursor.fetchall()
print(dt)

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

SELECT COLLATIONPROPERTY('chinese_prc_ci_as','codepage')


------------------------------------------
936

(1 行受影响)

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

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来获取?

先琢磨琢磨,按照自己的习惯输出一下结果

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代码书写初体验的全部内容,希望文章能够帮你解决文盲的Python入门日记:第二天,连接到mssql和python代码书写初体验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部