在 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,包含 idnameage 字段。

# 创建表
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
)


总结

  1. 连接数据库:使用 pyodbc.connect() 来建立与 SQL Server 的连接。
  2. 增、删、改、查:通过 INSERT INTOUPDATEDELETESELECT 操作来执行 CRUD。
  3. SQL 注入:使用参数化查询(即 ? 占位符)来避免 SQL 注入。
  4. 关闭连接:操作完成后,记得关闭连接和游标。

通过这篇教程,你应该可以掌握如何在 Python 中使用 pyodbc 与 SQL Server 进行交互,进行增、删、改、查等操作。