最近要将数据写到数据库里,学习了一下如何用 Python 来操作 SQL Server 数据库。
一、连接数据库:
首先,我们要连接 SQL Server 数据库,需要安装 pymssql 这个第三方库,打开 cmd,输入以下指令,等待安装完成即可。
pip install pymssql
连接数据库的代码如下:
import pymssql print('start to connect database') connect = pymssql.connect('localhost','sa','123456','BackupTest_1') #数据库实例名/地址,用户名,密码,要连接的数据库名 print('connecting') if connect: print('DataBase connect success') cursor = connect.cursor(); #获取操作游标
输出结果如下:
二、利用游标操作数据库
①创建数据表:
sql = """ IF OBJECT_ID('Student', 'U') IS NOT NULL DROP TABLE Student CREATE TABLE Student(id INT NOT NULL identity(1,1), Name NVARCHAR(100), Age INT, PRIMARY KEY(id)) """ cursor.execute(sql) #执行sql语句 connect.commit() #提交到数据库执行
执行结果如下:
②插入数据:
insert_sql = """ INSERT INTO Student(Name,Age) VALUES(%s,%d) """ data_insert = [('张三',21),('李四',22)] #要求是 tuple 类型数组 cursor.executemany(insert_sql,data_insert) connect.commit()
执行结果如下:
③查询数据:
sql_select = "SELECT * FROM Student" cursor.execute(sql_select) result = cursor.fetchall() #利用游标获取全部查询结果 print(result)
执行结果如下:
Note:除了 fetchall() 之外,还有 fetchone() 和 fetchmany() 等方法可以获取数据。但是,游标是会记录取到结果的第几个记录,所以当你执行完上面的 fetchall() 之后,再执行 fetchone() 并打印结果时,会发现它是个空值。
④修改数据:
#该语句查询条件带有中文,记得加 N sql_modify = """ UPDATE Student SET Age = 24 WHERE Name = N'张三' """ cursor.execute(sql_modify) connect.commit() cursor.execute("SELECT * FROM Student WHERE Name = N'张三'") #记得加 N search_result = cursor.fetchall() print(search_result)
执行结果如下,张三的年龄从21变更为24:
Note:因为我机子的环境是英文,所以建表时,将值为中文的字段类型设置成 NVACHAR,且当该字段作为查询条件时,需要在条件值字符串前面(不包括在字符串中)加一个 N,否则 SQL 语句执行后没效果,(0 row(s) affected)
⑤删除数据:
cursor.execute("SELECT * FROM Student") search_before = cursor.fetchall() print(search_before) sql_delete = """ DELETE FROM Student WHERE Name = N'张三' """ cursor.execute(sql_delete) connect.commit() cursor.execute("SELECT * FROM Student") search_after = cursor.fetchall() print(search_after)
执行结果如下:
⑥关闭数据库连接:
connect.close()
总结:
以上就是如何利用 Python 连接操作 SQL Server 数据库(增删查改),其实对于其他数据库(MySQL、SQLite 等)也是一个道理,只是需要导入对应的包而已,SQL 语法也是大同小异。本篇只是简单阐述了在 Python 中如何操作和获取数据库的数据,下篇博客将讲一下 Python 如何获取整张数据库表(包括表结构),并利用 Python 丰富的工具库来绘制统计图表。