pycharm如何连接并使用sqlserve【保姆级】

4 篇文章 0 订阅
1 篇文章 0 订阅

pycharm如何使用sqlserve

前几天有一个业务,用sqlserve实现一个医疗系统

基础页面部分,我使用两个比较好看的免费模板实现了登录注册和页面展示

(超级好看的登录注册页:6个超好看登录页面html

登录页
image-20221211221756906

健康医院网页设计

页面展示页

image-20221211220204467

当然,今天的重点不是以上,而是谈谈sqlseve在pycharm中的连接和使用

pycharm连接并使用sqlserve(云数据库)

正常情况下,当然是使用如下连接
image-20221211220129613

初步尝试

我直接进行了连接,一直告诉我一个错误

[08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。 ClientConnectionId:e7e03488-9398-4e20-ba95-86733053fd33
The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12].
Incorrect driver and/or database URL specified.

无奈之下我发现还有一个驱动可以用
image-20221211221353663

这个名字一听就挺好的,我直接使用了他,结果发现它能获取几乎所有数据库表,唯独我需要的表他没办法获取,一直处于该表为空的状态

老实讲,我在navicat和本地的sqlserve上都连接上了该表:不然我都该怀疑这个表是不是有问题了

为什么我执着于要在pycharm连接sqlserve

答案是:pycharm有自动代码生成,我甚至不需要自己写代码,只需要操作,就可以获得操作代码,治愈我为什么需要代码,因为我之前并不知道,sqlserve的代码语法和mysql其实是一样的,唯一的区别就是套了几层库

一般的数据库就是一个单词,而SQL serve的长这样:zyxz.dbo.doc_date,甚至在官网本地sqlserve软件提取代码,得到了这样的语句:

SELECT TOP (1000) [doc_id]
      ,[doc_name]
      ,[doc_date_fee]
  FROM [zyxz].[dbo].[doc_datefee]

这很不让人迷糊

最终解决方案

驱动还是使用最初的那个,而不是jdts(虽然我感觉这小子不错,但是确实是把我最需要的卡住了)

然后在advanced页面添加如下参数,并且在对应路径下创建同名文件(路径非必须同下)

-Djava.security.properties=d:\emp\my.java.security

image-20221211222535218

然后这个sqlserve完美连接

总结

不得不说,这个过程是艰难的,最后我得到的结论也让我很震撼:sqlserve看起来困难的表象之下,其实是和所有数据库一样的内核,一样的sql语句(我以前以为那些括号是必须,那个top也是要有的)

结果后来我尝试着用和mysql一样的sql语句,完美运行,那时候我感觉自己被自己的恐惧所吓到了,当你认为一个东西困难的时候,你会找理由去印证他,事实是,难不难,做完之后才知道

py文件连接sqlserve并获取数据

如果没有这个就安装一下

下面是一个查询案例

import pymssql
connect = pymssql.connect('sqlserve服务器地址', '用户名', '密码', '数据库名')
cursor = connect.cursor()
# 查询所有类型
sql = """
        SELECT distinct p.name
        FROM zyxz.dbo.doc_info p
        where doc_id=N'{}'
    """.format(doc_id)
cursor.execute(sql)
name = cursor.fetchone()[0]
cursor.close()
connect.close()

如果要对数据库进行操作

connect = pymssql.connect('sqlserve服务器地址', '用户名', '密码', '数据库名')
cursor = connect.cursor()
# 查询所有类型
sql = ''' 
    UPDATE zyxz.dbo.pat_reservation_info
    SET service_situation = 1
    WHERE pat_name LIKE N'{}' ESCAPE '#' AND doc_name LIKE N'{}' ESCAPE '#';
'''.format(reqeust.GET.get('user_name'), reqeust.GET.get('doc_name'), )

cursor.execute(sql)
connect.commit()
cursor.close()
connect.close()

可以看到,和普通的mysql和sqlite没有什么区别,唯一的区别可能是,这么连接比较麻烦

我尝试过封装函数,但是如果需要使用多次,不建议封装一整个函数反复进行连接和关闭(浪费时间)

也不建议在全局打开连接:这样我其他地方就访问不了了

所以老老实实的这样连接关闭(封装一个连接的函数,一个关闭的函数),就挺好的

总结

对于未知的东西:尤其这玩意儿百度用的人都少,不要害怕

作为程序员,做一些别人从来没做过的事情都是有可能的,一些新技术出来的时候,我们要勇敢争做第一人,那些少有人读的api文档,也要勇于翻阅,正因为你能做别人做不到的事,你才不会被别人所替代

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值