Python数据库操作【三】—— SQLServer

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

SQLServer简介

以下摘自百度百科:

SQL Server是由Microsoft开发和推广的关系数据库管理系统(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同开发的,并于1988年推出了第一个OS/2版本。Microsoft SQL Server近年来不断更新版本,1996年,Microsoft 推出了SQL Server 6.5版本;1998年,SQL Server 7.0版本和用户见面;SQL Server 2000是Microsoft公司于2000年推出,目前最新版本是2019年份推出的SQL SERVER 2019。

SQL Server是微软推出的重量级的数据库,目前有多个版本,如2000、2008、2012等,这些版本名字均为该版本推出的年份,每个版本的差异并不是特别大。本文使用SQL Server2016。

传送门:

Python数据库操作【一】—— Sqlite

Python数据库操作【二】—— MySQL 

本文代码已上传至GitHub,项目地址如下:

https://github.com/XMNHCAS/SQLServerPythonDemo


安装pymssql

python内未集成SQLServer的操作库,需要安装pymssql库。

pip3 install pymssql

Python数据库操作【三】—— SQLServer

安装完成后使用import pymssql导入。

pymssql有官方文档,里面有更详细的使用示例,链接地址如下:

GitHub

pymssql文档


增删改查(CRUD)

数据库远程访问配置

使用pymssql访问SQLServer,需要启用SQLServer的TCP/IP协议。

如下图所示,打开SQLServer配置管理器,选择“SQL Server网络配置”中对应的需要使用的实例,在右侧窗口中启用TCP/IP协议。

Python数据库操作【三】—— SQLServer

接着重启SQL Server服务,就可以通过IP的形式访问数据库了。

Python数据库操作【三】—— SQLServer

 服务重启完成后,使用Navicat测试,可以看到连接成功。

Python数据库操作【三】—— SQLServer​ 

新建数据库

新建CreateDatabase.py,使用pymssql创建TestDB数据库。

db.cursor()创建的游标对象,默认返回的是元组,通过设置as_dict=True可以将返回的数据改成字典类型。

如果最后再通过db.commit()来提交事务操作,可能会出现创建数据库失败的情况,故此处设置为autocommit,在游标执行sql的时候就提交操作。

import pymssql

# 打开数据库连接
db = pymssql.connect(server='localhost', user='test', password='123456')

# 创建游标对象,并设置返回数据的类型为字典
cursor = db.cursor(as_dict=True)

# 设置立即操作
db.autocommit(True)

# 查看现有数据库
sql = "SELECT * FROM SYSDATABASES"
cursor.execute(sql)
print("现有数据库:")
while True:
    msg = cursor.fetchone()
    if msg is None:
        break
    print(msg['name'])

# 创建数据库
sql = '''
IF NOT EXISTS(SELECT * FROM SYSDATABASES WHERE NAME = 'TestDB')
CREATE DATABASE TestDB;
'''
cursor.execute(sql)

# 查看现有数据库
sql = "SELECT * FROM SYSDATABASES"
cursor.execute(sql)
print("创建后的数据库:")
while True:
    msg = cursor.fetchone()
    if msg is None:
        break
    print(msg['name'])

# 关闭游标与数据库连接
cursor.close()
db.close()

运行结果如下:

Python数据库操作【三】—— SQLServer

新建数据表 

新建CreateTable.py,使用pymssql在TestDB数据库中新建一个Persons表。

import pymssql

# 打开数据库连接
db = pymssql.connect(server='localhost',
                     user='test',
                     password='123456',
                     database='TestDB')

# 创建一个游标对象
cursor = db.cursor()

# 查看现有表
sql = "SELECT NAME FROM TESTDB.SYS.TABLES"
msg = cursor.execute(sql)
print(cursor.fetchall())

# 创建Person表
sql = """
USE TestDB
CREATE TABLE [Persons](
ID INT PRIMARY KEY IDENTITY(1, 1),
Name VARCHAR(50),
Age INT,
)
"""
cursor.execute(sql)

# 查看现有表
sql = "SELECT NAME FROM TESTDB.SYS.TABLES"
cursor.execute(sql)
print(cursor.fetchall())

# 提交事务
db.commit()

# 关闭游标与数据库连接
cursor.close()
db.close()

运行结果如下:

Python数据库操作【三】—— SQLServer

新增记录(Create)

使用游标执行插入语句,不同于pymysql,pymssql不会返回游标执行后影响的行数。

而且由于编码问题,pymssql查询出来的中文数据,如果不进行转码则会输出乱码,所以后面均采用循环输出数据,同时将中文数据改成gbk的编码。该乱码问题可以通过设置数据库字段的编码格式的方式来解决,但是会稍微影响数据库存储性能,故此处不进行演示。

此方式支持单条数据插入和批量插入。

import pymssql

# 打开数据库连接
db = pymssql.connect(server='localhost',
                     user='test',
                     password='123456',
                     database='TestDB')

# 创建游标对象,并设置返回数据的类型为字典
cursor = db.cursor(as_dict=True)

# 插入单条数据
cursor.execute("INSERT INTO Persons(Name, Age) VALUES ('张三',18 )")

print("插入单条数据后的数据")
cursor.execute("SELECT * FROM Persons")
for item in cursor.fetchall():
    item["Name"] = item["Name"].encode("latin1").decode("gbk")
    print(item)


# 批量插入数据
sql = "INSERT INTO Persons(Name, Age) VALUES (%s,%s)"
cursor.executemany(sql, [('李四', 20), ('王五', 10)])

print("批量插入后的数据")
cursor.execute("SELECT * FROM Persons")
for item in cursor.fetchall():
    item["Name"] = item["Name"].encode("latin1").decode("gbk")
    print(item)

# 提交事务
db.commit()

# 关闭游标与数据库连接
cursor.close()
db.close()

运行结果如下:

Python数据库操作【三】—— SQLServer

检索记录(Retrieve)

执行查询语句后,可以使用游标的fetchone方法获取单条数据,也可以使用fetchmany获取指定数量的数据,还可以用fetchall直接获取全部数据。为了结果显示得更加清晰,此处全部使用循环进行数据输出。

import pymssql

# 打开数据库连接
db = pymssql.connect(server='localhost',
                     user='test',
                     password='123456',
                     database='TestDB')

# 创建游标对象,并设置返回数据的类型为字典
cursor = db.cursor(as_dict=True)

# 获取全部记录
cursor.execute("SELECT * FROM Persons")
allData = cursor.fetchall()
print("直接获取全部记录:")
for item in allData:
    item["Name"] = item["Name"].encode("latin1").decode("gbk")
    print(item)

# 获取前N条记录
cursor.execute("SELECT * FROM Persons")
manyData = cursor.fetchmany(2)
print("获取部分结果:")
for item in manyData:
    item["Name"] = item["Name"].encode("latin1").decode("gbk")
    print(item)

# 一次读取一条结果,循环获取所有记录
cursor.execute("SELECT * FROM Persons")
print("一次读取一条结果,循环获取所有记录:")
while True:
    singleData = cursor.fetchone()
    if singleData is None:
        break
    singleData["Name"] = singleData["Name"].encode("latin1").decode("gbk")
    print(singleData)

# 关闭游标
cursor.close()

# 提交事务
db.commit()

# 关闭数据库连接
db.close()

运行结果如下:

Python数据库操作【三】—— SQLServer

更新记录(Update)

使用游标执行update语句。此方法支持单条数据修改及批量修改。

import pymssql


# 打开数据库连接
db = pymssql.connect(server='localhost',
                     user='test',
                     password='123456',
                     database='TestDB')

# 创建游标对象,并设置返回数据的类型为字典
cursor = db.cursor(as_dict=True)

cursor.execute("SELECT * FROM Persons")
print("修改前的数据:")
cursor.execute("SELECT * FROM Persons")
for item in cursor.fetchall():
    item["Name"] = item["Name"].encode("latin1").decode("gbk")
    print(item)

# 执行单条数据修改
cursor.execute("UPDATE Persons SET Age = 20 WHERE Name = '张三'")

print("修改单条数据后的数据:")
cursor.execute("SELECT * FROM Persons")
for item in cursor.fetchall():
    item["Name"] = item["Name"].encode("latin1").decode("gbk")
    print(item)

# 执行批量修改
sql = "UPDATE Persons SET Age = %s WHERE Name = %s"
batchUpdate = cursor.executemany(sql, [(25, '李四'), (35, '王五')])

print("批量修改后的数据:")
cursor.execute("SELECT * FROM Persons")
for item in cursor.fetchall():
    item["Name"] = item["Name"].encode("latin1").decode("gbk")
    print(item)

# 关闭游标
cursor.close()

# 提交事务
db.commit()

# 关闭数据库连接
db.close()

运行结果如下:

Python数据库操作【三】—— SQLServer

删除数据(Delete)

使用游标执行delete语句。此方法也支持单条数据删除以及批量删除。

import pymssql

# 打开数据库连接
db = pymssql.connect(server='localhost',
                     user='test',
                     password='123456',
                     database='TestDB')

# 创建游标对象,并设置返回数据的类型为字典
cursor = db.cursor(as_dict=True)

print("删除前的数据:")
cursor.execute("SELECT * FROM Persons")
data = cursor.fetchall()
if len(data) == 0:
    print(data)
else:
    for item in data:
        item["Name"] = item["Name"].encode("latin1").decode("gbk")
        print(item)

# 执行单条数据删除
cursor.execute("DELETE FROM Persons WHERE ID = 1")

print("删除单条数据后的数据:")
cursor.execute("SELECT * FROM Persons")
data = cursor.fetchall()
if len(data) == 0:
    print(data)
else:
    for item in data:
        item["Name"] = item["Name"].encode("latin1").decode("gbk")
        print(item)

# 执行批量删除
sql = "DELETE FROM Persons WHERE ID = %s"
cursor.executemany(sql, [('2'), ('3')])

print("批量删除后的的数据:")
cursor.execute("SELECT * FROM Persons")
data = cursor.fetchall()
if len(data) == 0:
    print(data)
else:
    for item in data:
        item["Name"] = item["Name"].encode("latin1").decode("gbk")
        print(item)

# 关闭游标
cursor.close()

# 提交事务
db.commit()

# 关闭数据库连接
db.close()

运行结果如下:

Python数据库操作【三】—— SQLServer文章来源地址https://www.toymoban.com/news/detail-436899.html

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

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

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

相关文章

  • sqlserver数据库错误码

    错误 严重性 是否记录事件 说明 -2 超时时间已到。 超时时间在操作完成或服务器没有响应之前已过。 (Microsoft SQL Server,错误: -2)。 -1 在建立与服务器的连接时出错。 连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接,这可能会导致此失败。 (提供程序:

    2024年02月05日
    浏览(123)
  • 数据库实训sqlserver

    一、数据库设计题 1、以“library”为名称创建一个数据库。该数据库中包含一个主数据文件tsdata.mdf,存放路径为“d:data”;一个事务日志文件tslog.ldf,存放路径为“d:data”。其他设置自定。  2、在上题创建好的数据库中,按如下要求创建三张表。 表1 书籍表:用来存储书

    2024年02月09日
    浏览(48)
  • SQLServer 数据库之锁

    SQL Server 数据库支持多个用户同时访问数据库,但当用户同时访问数据库时,就会造成 并发问题 ,锁的机制能很好地解决这个问题,保证数据的完整性和一致性; SQL Server 自带锁机制,若是简单的数据库访问机制,完全能满足用户的需求;但对于数据完全与数据完整性有特殊

    2024年02月13日
    浏览(52)
  • SQLServer数据库备份与还原

            Microsoft SQL Server Management Studio,顾名思义,是微软 SQL Server的管理工具,说白了,就是微软官方管理自家数据库的软件。可以对数据库和表操作,本章我们用到它强悍的备份和还原功能。       (1)  选中需要备份的数据库,右键选择备份   (2)添加目标 (3)此

    2024年02月13日
    浏览(48)
  • SqlServer 快速数据库脚本迁移

    做工业的,经常遇到内网的项目,就是数据往本地的数据库传。由于这个问题所以我们需要新建一个数据库。最合适的就是数据库脚本迁移。 高级 操作完成 生成模板数据库 生成表结构 生成表数据(因为有些配置数据是写在数据库里面的) 导出模板数据库脚本 生成的脚本语

    2024年02月12日
    浏览(46)
  • 如何远程连接SQLServer数据库

    1.打开  选中如下的连接方式  连接成功后就会出出现 2.连接成功后:右键设置属性 安全性设置:如下图所示 设置连接属性:     设置完成之后点击完成!!! 3.打开  启动sqlServer服务,必须启动!!  按照如下进行启动,右键即可启动!  设置本机的ip地址,ipconfig查看本

    2024年02月09日
    浏览(48)
  • Kettle连接SQLSERVER数据库

    下载驱动程序 微软官网下载 Microsoft SQL Server JDBC 驱动程序:https://www.microsoft.com/zh-cn/download/details.aspx?displaylang=enid=11774e6b34bbe-475b-1abd-2c51-b5034bcdd6d2=truea03ffa40-ca8b-4f73-0358-c191d75a7468=true44F86079-8679-400C-BFF2-9CA5F2BCBDFC=1 双击下载的软件进行解压,找到jre8文件夹底下的sqljdbc42.jar文件,

    2024年02月11日
    浏览(75)
  • 使用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日
    浏览(40)
  • phpstorm配置链接sqlserver数据库

    开启sqlserver的TCP/IP 1433端口

    2024年02月10日
    浏览(45)
  • sqlserver数据库导出到mysql

    爱到分才显珍贵,很多人都不懂珍惜拥有,只到失去才看到,其实那最熟悉的才最珍贵的。   这里只介绍一种方式,有很多的方式。 1.使用Navicat 安装 下载 2.工具 数据传输  3.选择源和目标 然后开始 4.最好导入前备份一下库

    2024年02月11日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包