在 Python 3.8 中操作 SQL Server 2016,通常使用 pyodbc
库来连接和操作数据库。下面我将为你提供一个 增、删、改、查(CRUD)操作的简单教程,适合 Python 小白理解和学习。
1. 安装 pyodbc 库
首先,你需要安装 pyodbc
库,这是 Python 与 SQL Server 交互的常用库。
pip install pyodbc
2. 连接到 SQL Server 数据库
在执行任何 SQL 操作之前,你需要连接到 SQL Server 数据库。你需要提供一些基本信息,如:服务器地址、数据库名称、用户名、密码等。
下面是如何建立与 SQL Server 的连接:
import pyodbc
# 连接字符串
conn_str = (
r'DRIVER={ODBC Driver 17 for SQL Server};'
r'SERVER=localhost;' # 你的 SQL Server 地址
r'DATABASE=TestDB;' # 你的数据库名
r'UID=sa;' # SQL Server 用户名
r'PWD=your_password' # SQL Server 密码
)
# 连接到数据库
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
print("连接成功!")
3. 增加数据(Insert)
增加数据时,我们可以使用 INSERT INTO
语句插入数据。
3.1 创建表(如果没有表的话)
首先,我们创建一个简单的表 employees
,包含 id
、name
和 age
字段。
# 创建表
cursor.execute("""
CREATE TABLE IF NOT EXISTS employees (
id INT PRIMARY KEY IDENTITY(1,1),
name NVARCHAR(50),
age INT
)
""")
conn.commit() # 提交事务
print("表创建成功!")
3.2 插入数据
插入数据到表中:
# 插入数据
cursor.execute("INSERT INTO employees (name, age) VALUES (?, ?)", ('Alice', 30))
cursor.execute("INSERT INTO employees (name, age) VALUES (?, ?)", ('Bob', 25))
conn.commit() # 提交事务
print("数据插入成功!")
在这里,?
是占位符,用于传递数据。避免直接将数据拼接到 SQL 语句中,能够防止 SQL 注入。
4. 查询数据(Select)
查询数据时,使用 SELECT
语句。
# 查询数据
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall() # 获取所有查询结果
# 打印查询结果
for row in rows:
print(f"ID: {row.id}, Name: {row.name}, Age: {row.age}")
这里的 fetchall()
返回所有查询结果,fetchone()
可以返回单个查询结果。
5. 更新数据(Update)
更新数据时,使用 UPDATE
语句。
# 更新数据
cursor.execute("UPDATE employees SET age = ? WHERE name = ?", (35, 'Alice'))
conn.commit() # 提交事务
print("数据更新成功!")
6. 删除数据(Delete)
删除数据时,使用 DELETE
语句。
# 删除数据
cursor.execute("DELETE FROM employees WHERE name = ?", ('Bob',))
conn.commit() # 提交事务
print("数据删除成功!")
7. 关闭连接
操作完成后,记得关闭数据库连接。
# 关闭游标和连接
cursor.close()
conn.close()
print("数据库连接关闭!")
8. 完整的示例代码
下面是将增、删、改、查四个操作结合起来的完整示例代码:
import pyodbc
# 连接到 SQL Server 数据库
conn_str = (
r'DRIVER={ODBC Driver 17 for SQL Server};'
r'SERVER=localhost;'
r'DATABASE=TestDB;'
r'UID=sa;'
r'PWD=your_password'
)
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# 创建表(如果没有的话)
cursor.execute("""
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='employees' AND xtype='U')
CREATE TABLE employees (
id INT PRIMARY KEY IDENTITY(1,1),
name NVARCHAR(50),
age INT
)
""")
conn.commit()
print("表创建成功!")
# 插入数据
cursor.execute("INSERT INTO employees (name, age) VALUES (?, ?)", ('Alice', 30))
cursor.execute("INSERT INTO employees (name, age) VALUES (?, ?)", ('Bob', 25))
conn.commit()
print("数据插入成功!")
# 查询数据
cursor.execute("SELECT * FROM employees")
rows = cursor.fetchall()
print("查询结果:")
for row in rows:
print(f"ID: {row.id}, Name: {row.name}, Age: {row.age}")
# 更新数据
cursor.execute("UPDATE employees SET age = ? WHERE name = ?", (35, 'Alice'))
conn.commit()
print("数据更新成功!")
# 删除数据
cursor.execute("DELETE FROM employees WHERE name = ?", ('Bob',))
conn.commit()
print("数据删除成功!")
# 关闭连接
cursor.close()
conn.close()
print("数据库连接关闭!")
9. 常见问题解决
9.1 连接问题:
- 如果遇到
Login failed for user
错误,请确保数据库用户名和密码正确,并且 SQL Server 允许远程连接(可以在 SQL Server 配置管理器中检查)。 - 如果出现
ODBC Driver not found
错误,请确保已安装正确的 ODBC 驱动程序,可以在 SQL Server 官网下载。
9.2 数据表已经存在问题:
CREATE TABLE IF NOT EXISTS
语句是 MySQL 语法,在 SQL Server 中可以使用IF NOT EXISTS
语法判断表是否存在。
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='employees' AND xtype='U')
CREATE TABLE employees (
id INT PRIMARY KEY IDENTITY(1,1),
name NVARCHAR(50),
age INT
)
总结
- 连接数据库:使用
pyodbc.connect()
来建立与 SQL Server 的连接。 - 增、删、改、查:通过
INSERT INTO
、UPDATE
、DELETE
和SELECT
操作来执行 CRUD。 - SQL 注入:使用参数化查询(即
?
占位符)来避免 SQL 注入。 - 关闭连接:操作完成后,记得关闭连接和游标。
通过这篇教程,你应该可以掌握如何在 Python 中使用 pyodbc
与 SQL Server 进行交互,进行增、删、改、查等操作。
发表回复