文盲的Python入门日记:第二天,连接到mssql和python代码书写初体验
在实际工作中,不管是app,web,桌面程序,或者其他什么类型的应用,在没有数据库支持的情况下,很难做到应用的扩展,增加更广,更深的挖掘,所以,咱们也先不管其他教程怎么说了,先连接到数据库...
文盲的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/html\n")
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:\****\site\py\2.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:\****\site\py\2.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/html\n")
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格式,不过居然取消了++运算,只能用+=了
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)