Python连接SQLserver数据库

这篇具有很好参考价值的文章主要介绍了Python连接SQLserver数据库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前进四的状态出发!


前言

学习Python 连接 数据库

解决问题:
1:如何连接数据库
2:如何进行简单查询
3:如何将查询中的中文乱码给修复
4:如何进行插入,更新,删除


一、如何连接数据库?

#pip install pymssql 先安装

import pymssql #导入模块

connect = pymssql.connect('(local)','sa','123456','School')  
#connect = pymssql.connect('服务器名称', '用户名', '密码', '库名')  # 建立连接
if connect:
    print("连接成功")
#输出
连接成功

二、如何进行简单查询

cursor = connect.cursor()#创建一个游标对象python里的sql语句都要通过cursor来执行
sql="select * from Student" #一个简单的sql查询语句
cursor.execute(sql)#执行sql语句
row = cursor.fetchone() #用fetchone 获取游标的数据,如果是首次就定位首行
while row:  # 循环读取所有结果
 	print(row)
    row = cursor.fetchone()#取下一个内容
cursor.close()
connect.close()
#结果出现乱码,下面我们解决
<pymssql._pymssql.Connection object at 0x0000025DBDEE9F00>
连接成功
(2021402075, 'ÏôÑ×', 'ÄÐ', datetime.datetime(1900, 2, 7, 0, 0), 'MA')
(2021402076, 'ÏôÑ×', 'ÄÐ', datetime.datetime(2003, 3, 18, 0, 0), 'CS')
(2021402077, '´ºÒ°Ó£', 'Å®', datetime.datetime(2009, 4, 20, 0, 0), 'MA')
(2021402078, '´ºÈÕÒ°ñ·', 'Å®', datetime.datetime(2003, 6, 20, 0, 0), 'CS')
(2021402079, 'ÈÕÏò³ûÌï', 'Å®', datetime.datetime(2006, 7, 7, 0, 0), 'MA')
(2021402080, 'ÄÈÃÀ', 'Å®', datetime.datetime(2003, 6, 6, 0, 0), 'CS')

五 如何将查询中的中文乱码给修复

方法一

主要在pymssql.connect 中添加charset = ‘cp936’

原因:因为字符串字段类型为:varchar,造成读取数据乱码。

import pymssql #导入模块
connect = pymssql.connect('(local)','sa','123456','School',charset='cp936')  #connect = pymssql.connect('服务器名称', '用户名', '密码', '库名')  # 建立连接
if connect:
    print(connect)
    print("连接成功")
cursor = connect.cursor()
sql = "select * from Student"
cursor.execute(sql)
row = cursor.fetchone()
while row:
    print(row)
    row = cursor.fetchone()
cursor.close()
connect.close()
#结果
<pymssql._pymssql.Connection object at 0x00000115E49A9FC0>
连接成功
(2021402075, '萧炎', '男', datetime.datetime(1900, 2, 7, 0, 0), 'MA')
(2021402076, '萧炎', '男', datetime.datetime(2003, 3, 18, 0, 0), 'CS')
(2021402077, '春野樱', '女', datetime.datetime(2009, 4, 20, 0, 0), 'MA')
(2021402078, '春日野穹', '女', datetime.datetime(2003, 6, 20, 0, 0), 'CS')
(2021402079, '日向雏田', '女', datetime.datetime(2006, 7, 7, 0, 0), 'MA')
(2021402080, '娜美', '女', datetime.datetime(2003, 6, 6, 0, 0), 'CS')
#成功完美的查询

方法一的缺点:
如果SQL语句中含有中文,就会得不到数据,如sql中有:where table_colum = ‘魏本明’;即便将sql语句:sql.encode(‘cp936’),也不行!!

方法二

更通用全部

直接用sql语句将varchar转为nvarchar类型,不再需要指定charset了,就没问题了(注意转换列名称起别名),直接写sql语句如下

select convert(nvarchar(50),table_colum) 
as 'nvarchar_colum' from mytable where convert(nvarchar(50),table_colum) = '魏本明'
就是将需要转换的列(,varchar),转换为nvarchar,也可以完成

例如:

import pymssql #导入模块
connect = pymssql.connect('(local)','sa','123456','School')  #connect = pymssql.connect('服务器名称', '用户名', '密码', '库名')  # 建立连接
if connect:
    print(connect)
    print("连接成功")

cursor = connect.cursor()#创建一个游标对象python里的sql语句都要通过cursor来执行
sql="select Ssno,convert(nvarchar(50),Snam) as 'a',convert(nvarchar(50),Ssex) as 'b' from Student"
cursor.execute(sql)#执行语句
row = cursor.fetchone()#用fetchone 获取游标的数据,如果是首次就定位首行
print(row)
while row:  # 循环读取所有结果
    print("id=%s,Name=%s,Sex=%s" % (row[0], row[1], row[2]))  # 输出结果
    row = cursor.fetchone()#取下一个内容
cursor.close()
connect.close()
结果:
<pymssql._pymssql.Connection object at 0x0000019C35BBC0C0>
连接成功
(2021402075, '萧炎', '男', datetime.datetime(1900, 2, 7, 0, 0), 'MA')
(2021402076, '萧炎', '男', datetime.datetime(2003, 3, 18, 0, 0), 'CS')
(2021402077, '春野樱', '女', datetime.datetime(2009, 4, 20, 0, 0), 'MA')
(2021402078, '春日野穹', '女', datetime.datetime(2003, 6, 20, 0, 0), 'CS')
(2021402079, '日向雏田', '女', datetime.datetime(2006, 7, 7, 0, 0), 'MA')
(2021402080, '娜美', '女', datetime.datetime(2003, 6, 6, 0, 0), 'CS')

四 如何进行插入,更新,删除

进行更新数据的操作都要用到connect.commit()函数
update,delete,insert等修改表中数据的需要commit

commit字面意思就是 投入
然后更改表的结构就不用了,因为他们内置了commit
create,drop,alter等修改表结构的,就不需要commit,因为内部隐藏了commit

不行的时候加上conn.autocommit(True)
推荐先在SQL中查看语句有没有语法错误在放回来运行,能解决你50%以上的报错

总结

我下面进行一个小项目全部都在python中完成
目标:
1:创建一个数据库
2:创建一个表
3:为这个表插入数据
4:更新插入的数据
5:查询前三行数据
6:插入一列属性文章来源地址https://www.toymoban.com/news/detail-787663.html


import  pymssql
# 1:创建一个数据库
conn = pymssql.connect('.','sa','123456')#单纯连接数据库
if conn:
    print("连接成功")
cursor = conn.cursor() #创建执行语句
conn.autocommit(True) #创建库的核心!!!
sql_DATA ="""
CREATE DATABASE PY_DATA
ON   PRIMARY
 (NAME = 'PY_DATA',
FILENAME = 'D:\DATA\PY_DATA.MDF' ,
SIZE = 5MB,
MAXSIZE = 20MB,
FILEGROWTH = 20%)
LOG ON
(NAME ='PY_DATA_LOG',
FILENAME = 'D:\DATA\PY_DATA_LOG. LDF',
SIZE = 5MB,
MAXSIZE = 10MB,
FILEGROWTH = 2MB)
"""
cursor.execute(sql_DATA)
cursor.close()
conn.autocommit(False)
conn.close()
----------------------------------------------------------------------------
#2:创建一个表
import pymssql
##连接
conn = pymssql.connect('.','sa','123456','School')
if conn:
    print("连接成功")

##操作
cursor = conn.cursor()
conn.autocommit(True)#是修改表的结构都要有吗?
sql_TABLE = """
Create Table Student_3(
ID int primary key,
Name varchar(50),
Age int)
"""
cursor.execute(sql_TABLE)
conn.autocommit(False)
conn.close()
----------------------------------------------------------------------------

3:为这个表插入数据
import  pymssql
conn = pymssql.connect('.','sa','123456','PY_DATA')
if conn:
    print("True")

cursor = conn.cursor()
a = "松仁、秉峰、泳纪海奉、威剑、颂和、祥益、腾恩、柏铄、孟深、忠庄、轩哲、铠鑫、仕伦、儒亿、积进信钦、贤元、程基、安泉、树昌、祝斌、一科、游湖、普济、中坚"
a = a.split("、")
for i in range(len(a)):
    sql_insert = f"insert into Student Values({i},'{a[i]}',18)"
    print(sql_insert)
    cursor.execute(sql_insert)
    conn.commit()
cursor.close()
conn.close()
----------------------------------------------------------------------------

4:更新插入的数据
import pymssql
conn = pymssql.connect('.','sa','123456','PY_DATA')
if conn:
    print("True")

cursor = conn.cursor()
sql_updata = "update student set Name='消息' where ID = 12"
cursor.execute(sql_updata)
conn.commit()
cursor.close()
conn.close()


----------------------------------------------------------------------------
5:查询前三行数据
import pymssql
conn = pymssql.connect('.','sa','123456','PY_DATA',charset='cp936')
if conn:
    print("True")
cursor = conn.cursor()
sql_select = "Select Top 3 * From Student"
cursor.execute(sql_select)
row =1
while row:
    row = cursor.fetchone()
    print(row)
cursor.close()
conn.close()
----------------------------------------------------------------------------
6:插入一列属性
import pymssql
conn = pymssql.connect('.','sa','123456','School')
cursor = conn.cursor()
conn.autocommit(True)
sql_insertbase = "Alter table Student_3 add idname int Null"
cursor.execute(sql_insertbase)
cursor.close()
conn.close()

到了这里,关于Python连接SQLserver数据库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Java连接SQLserver数据库

    使用win10、SQLServer2012、eclipse2020-6、Java1.8.0_311    下载sqljdbc_6.0.8112.200_chs.tar.gz,再将其解压sqljdbc_6.0.8112.200_chs.tar  这里x64是在适于64位,x86是适于32位,选择合适自己电脑的,这里我的是64位的计算机,选择x64文件中的文件,下如图。 将此文件sqljdbc_auth.dll复制到D:Javajdk1.8.

    2024年02月08日
    浏览(32)
  • ODBC连接数据库以SQLserver为例

    ODBC是open database connect的缩写,意思是开放式数据库连接 首先要下载数据库!! 配置数据库(以SQL server为例) 首先打开SSMS(SQL server management studio) 右键所连接的数据库引擎,点击属性 点击安全性,选择SQL sesrver 和Windows的身份验证模式(要有密码) (如果刚开始下载SQL

    2023年04月23日
    浏览(40)
  • geoserver2.18(5):连接sqlserver数据库

    geoserver 2.18 sqlserver 2014 官方说明: Microsoft SQL Server and SQL Azure — GeoServer 2.20.x User Manual 有两种方式,1、JDBC连接,2、JNDI方式,讲解通过JDBC方式来连接GeoServer。 地址:Download - GeoServer,根据自己版本下载,将 gt-jdbc-sqlserver-24.0.jar、mssql-jdbc-8.2.2.jre8.jar 拷贝至geoserver目录下的WE

    2024年02月06日
    浏览(59)
  • py连接sqlserver数据库报错问题处理。20009

    pymssql模块连接sqlserver出现如下错误: 打开“SQL Server Configuration Manager”,找不到的话,可在计算机管理 - 服务和应用程序中找到。 在SQL Server Network Configuration - Protocols for SQLEXPRESS中启用TCP/IP协议, TCP/IP - Properties - IP Addresses 修改里面ip为127.0.0.1的启用状态。 TCP/IP - Properties

    2024年02月01日
    浏览(35)
  • 使用SqlSugar连接多个数据库(sqlserver,sqlite,mysql)

        有时候,一个项目只有一个数据库,比如只有SQLite,或者MySQL数据库,那么我们只需要使用一个固定的数据库即可。但是一个项目如果写好了,有多个用户使用,但是多个用户使用不同的数据库,这个时候,我们就需要把软件设计成可以连接多个数据库的模式,用什么数

    2023年04月08日
    浏览(43)
  • c# 访问sqlServer数据库时的连接字符串

    //sql server 身份验证的场合, 连接字符串 private string ConnstrSqlServer = \\\"server=服务器名称;uid=登录名称;pwd=登录密码;database=数据库名称\\\"; //windows 身份验证连接字符串 private string ConnstrWindows = \\\"server=服务器名称;database=数据库名称;Trusted_Connection=SSPI\\\";    // C# 代码中用 SqlClient 的方式

    2024年02月10日
    浏览(38)
  • .NET Core/.NET6 使用DbContext 连接数据库,SqlServer

    安装以下NuGet包 Microsoft.EntityFrameworkCore.SqlServer:SQL server 需要添加包 Microsoft.EntityFrameworkCore.Tools Newtonsoft.Json:用于Json格式转换 创建一个实体类来表示数据库表。在项目中创建一个名为Customer.cs的文件,并添加以下代码 创建一个数据库上下文类,用于定义实体类和数据库连接

    2024年02月07日
    浏览(39)
  • idea连接Sqlserver数据库报错:驱动程序无法使用安全套接字层(SSL)加密建立到SQL

    com.microsoft.sqlserver.jdbc.SQLServerException:驱动程序无法使用安全套接字层(SSL)加密建立到SQL Server的安全连接。错误:“客户端首选项[TLS12]不接受服务器选择的协议版本TLS10”。 使用idea连接Sqlserver数据库,然后想用MybatisX插件生产代码 1、建立连接 填写数据库信息 测试连接报错

    2024年02月07日
    浏览(51)
  • 【SQLServer】sqlserver数据库导入oracle

    将sqlserver数据库导入到oracle 实用工具: SQL Server Management Studio 15.0.18424.0 SQL Server 管理对象 (SMO) 16.100.47021.0+7eef34a564af48c5b0cf0d617a65fd77f06c3eb1 Microsoft Analysis Services 客户端工具 15.0.19750.0 Microsoft 数据访问组件 (MDAC) 10.0.19041.2486 Microsoft MSXML 3.0 4.0 6.0 Microsoft .NET Framework 4.0.30319.42000 操

    2024年02月09日
    浏览(42)
  • 连接数据库报com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    JDBC加载驱动,连接SQLServer 2012 报 java.ext.dirs: C:Program FilesJavajdk1.8.0_331jrelibext;C:WindowsSunJavalibext com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client pre

    2023年04月21日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包