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:插入一列属性


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连接SQL Server数据库的步骤: 1. 安装pyodbc模块 在Python连接SQL Server需要使用模块pyodbc,因此需要先安装该模块,使用命令`pip install pyodbc`。 2. 导入pyodbc模块 安装完成后,在Python中导入pyodbc模块,使用`import pyodbc`。 3. 连接SQL Server数据库 使用pyodbc的`connect`方法连接SQL Server数据库。需要提供数据库连接字符串,格式为: ``` DRIVER={SQL Server};SERVER=server_name;DATABASE=database_name;UID=username;PWD=password ``` 其中,server_name、database_name、username、password需要根据实际情况进行替换。 示例代码: ```python import pyodbc # 连接数据库 conn_str = 'DRIVER={SQL Server};SERVER=localhost;DATABASE=testdb;UID=sa;PWD=password' conn = pyodbc.connect(conn_str) # 创建游标对象 cursor = conn.cursor() # 查询数据 cursor.execute('SELECT * FROM user') # 打印查询结果 for row in cursor: print(row) # 关闭游标和数据库连接 cursor.close() conn.close() ``` 以上代码连接了本地服务器上的testdb数据库,并查询了其中一个叫做user的表的所有数据。每一行数据是一个元组,其中包含各个字段的值。 注意事项: - 在连接字符串中,需要将数据库名、用户名、密码等敏感信息替换成实际的内容; - 如果SQL Server数据库使用了Windows身份验证,可以省略`UID`和`PWD`两个参数,将其设置为空字符串,然后在连接字符串中添加`Trusted_Connection=yes`。 参考文档: - [pyodbc](https://github.com/mkleehammer/pyodbc/wiki)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值