(pyCharm)pymssql远程连接sql server、语法介绍、错误解决

pymssql是什么

pymssql是python的一个第三方库,是用来连接sql server数据库并对库中数据进行操作的一个工具。

一、测试环境

两台电脑,windows10系统,pycharm软件。

二、pymssql下载

1、打开终端
按win+R组合键打开“运行”对话框,输入cmd打开终端。
2、输入pip install pymssql下载安装pymssql(前提是电脑已经安装了python,若没安装请自行百度教程安装一个)
3、稍等片刻即可下载完毕并自动安装,关闭终端。

三、实现连接

1、关闭两台电脑的防火墙,确保两台电脑处于同一局域网内。
2、打开第一台电脑的sql server,登录并创建数据库test,新建表userInfo。
3、打开第二台电脑上的pycharm软件,新建工程。输入如下连接语句并运行:

import pymssql
#创建连接
conn = pymssql.connect(
    server='第二台电脑ip',
    port='sql server的tcp/ip动态端口号',
    user='sql server登陆时用的用户名',
    password='sql server登录账号对应的密码',
    database='所要连接的数据库名'
)

if conn:
	print("连接成功")
conn.close()#关闭连接
	

注意:ip地址分为以太网的和无线局域网的,两种IP不同,连接时需要根据实际情况选择。如果两台电脑都连接的是WiFi,则选择无线局域网对应的IP,连接网线的就选择以太网对应的IP。IP与tcp/ip动态端口号会变,如果之前能连接上,现在却连不上了,那么请检查IP和端口号是否正确。

(一)如何查看电脑的IP

1、打开终端输入ipconfig,回车
在这里插入图片描述

(二)如何查看sql server的tcp/ip动态端口号

1、打开计算机管理器(G)
win+X,点击计算机管理器
2、(如图2所示)点击服务和应用程序–>SQL Server配置管理器–>SQL Server网络配置–>SQLEXPRESS协议–>右键TCP/IP–>属性((如图2所示如果TCP/IP的状态显示为禁用,那么动态端口号为空后者为0,这时需要右键启动TCP/IP,然后点击SQL Server服务,右键SQL Server (SQLEXPRESS)重新启动,这样TCP/IP启动才生效,一般情况下就可以看到动态端口号,若还没有,二般情况下需要重启电脑,或者第二天再看看吧,会有的,具体什么原因我也不知道,就离谱)
图 1
在这里插入图片描述
图 2
在这里插入图片描述

3、选着IP地址,滑倒最底可以看到TCP动态端口号。
在这里插入图片描述

四、pymssql常用操作

1、创建游标
cursor = conn.cursor()
(:这里conn是我们连接时得到的对象;cursor()方法时pymssql的内置创建游标的方法;cursor是我们创建的游标)

2、设置提交事物:
自动提交conn.autocommit(True)。如果不设置自动提交,则每次调用execute()和executemany()方法后都需要调用一次conn.commit()方法进行事物提交,不然sql语句执行不成功。

3、查询
cursor.execute("SELECT * FROM 表名")
例如:
cursor.execute('SELECT 入场时间 FROM 实时监控 WHERE 车牌号=%s', carboard)
:cursor为我们之前创建好的游标,execute()方法为pymssql内置的方法)

4、插入
cursor.executemany("INSERT INTO 表名 VALUES(参数占位符)",[(参数列表)])
例如:
cursor.executemany("INSERT INTO 实时监控 VALUES (%s,%s,%s,%s,%s)", [(car_number, plate_color, curr_time,x,y)])
:executemany()方法为pymssql内置的方法,可平批量插入数据)

5、修改
cursor.executemany("update 表名 set 要修改属性名=占位符,WHERE 属性名=占位符",[(参数列表)]
例如:
cursor.executemany("update 实时监控 set 车牌号=%s, WHERE 车牌号=%s", [(charge, carboard)])

6、删除
cursor.execute("delete 表名 where 属性名=占位符",占位符处对应的值)

代码示例:

import pymssql

car_number='京A-12B45'
plate_color='蓝'
carboard='京A-12B46'
curr_time='2021-07-06 15:51:20'

def connectsql():
    conn = pymssql.connect(
        server='10.33.43.38',
        port='49678',
        user='user2',
        password='123',
        database='ParingLot'
    ) 
    return conn
    
def monney():
    conn = connectsql()#创建连接
    conn.autocommit(True)#设置事件自动提交
    if conn:
        print("连接成功")
        cursor = conn.cursor()#创建游标
	#修改车牌号
    cursor.executemany("update 实时监控 set 车牌号=%s, WHERE 车牌号=%s", [(charge, carboard)])
    #插入数据
    cursor.executemany("INSERT INTO 实时监控 VALUES (%s,%s,%s)", [(car_number, plate_color, curr_time)])
    #查询数据
    cursor.execute("SELECT * FROM 实时监控")
    #row = cursor.fetchall()
    #row = cursor.fetchone()
    #按行输出
    for row in cursor:
        print(row)
    #断开数据库连接
    conn.close()

if __name__ == '__main__':
    monney()

五、可能遇到的一些问题

总是连接报错,有两种可能
1、语法有错,或者参数有错,解决方法就是错的地方改正就好了(具体什么错看个人)

2、配置问题,解决方法如下
(1)打开sql server数据库,查看是否允许远程连接
步骤如下:
使用windows默认登陆
在这里插入图片描述
右键最顶层的目录选着属性
在这里插入图片描述
选择连接,勾上允许远程连接
在这里插入图片描述

(2)打开sql server配置管理器,选择SQLEXPRESS的协议,右键TCP/IP选择属性,选择IP地址,将里面的所有IP1–IP9最后一项都改为是或者部分改为是,然后重启SQL Server(SQLEXPRESS),(这里的东西上文都有提到在哪里,这里不再赘述)现在尝试连接,若不能连接,请看下面一步
(3)在防火墙创建一个新的TCP入站规则
步骤如下:
1、打开控制面板,找到Windows Defender 防火墙打开
在这里插入图片描述
2、选择高级设置
在这里插入图片描述
3、选着入站规则–>新建规则
在这里插入图片描述
4、选着端口–>下一步
在这里插入图片描述

5、选择TCP–>特定本地端口–>填1433(一般默认端口都是1433)–>下一步
在这里插入图片描述
6、允许连接–>下一步
在这里插入图片描述
7、默认勾选就好–>下一步
在这里插入图片描述
8、取个名–>填写相应的说明方便我们知道这个规则是我们自己创建的(可不写)–>完成
在这里插入图片描述
9、重启电脑(新建规则只有在重启后才生效)

PS:如果对您有帮助,点个赞呀,谢谢

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐