Python连接SQL SEVER数据库全流程

背景介绍

在数据分析领域,经常需要从数据库中获取数据进行分析和处理。而SQL Server是一种常用的关系型数据库管理系统,因此学习如何使用Python连接SQL Server数据库并获取数据是非常有用的。

以下是Python使用pymssql 连接SQL Server数据库的全流程:

  • 安装pymssql库
  • 本地账号设置
  • 脚本连接
  • 数据导入函数实现

一、安装pymssql

pymssql是Python连接SQL Server数据库的一个库,可以通过pip命令进行安装。在命令行中输入以下命令即可安装:

复制代码
pip install pymssql

二、本地账号设置

1、设置sa账户的登录密码

在SQL Server Management Studio中,展开"安全性"文件夹,右键单击"登录名"并选择"新建登录名"。在弹出的对话框中,输入登录名"sa",选择"SQL Server身份验证",设置密码并确保"登录"选项卡下"默认数据库"为目标数据库。最后,在"状态"选项卡下选择"启用"并确保"允许连接"复选框被选中。

2、开启双重验证

在SQL Server Management Studio中,右键单击SQL Server实例名称并选择"属性"。在弹出的对话框中,选择"安全性"选项卡,将"身份验证"设置为"SQL Server和Windows身份验证模式",并选择"应用"以保存更改。

3、开启TCP/IP本地服务

在SQL Server Configuration Manager中,展开"SQL Server网络配置"文件夹,右键单击"协议"文件夹并选择"新建协议"。选择"TCP/IP"协议,右键单击"TCP/IP"协议并选择"属性"。在弹出的对话框中,将"启用"设置为"是",并确保"IP地址"选项卡下的"TCP动态端口"为空。然后,切换到"IPALL"选项卡,并将"TCP端口"设置为1433(或其他您想要的端口号)。保存更改并重启SQL Server服务。

完成以上步骤后,即可使用Python连接本地SQL Server数据库。

三、脚本连接

做好以上的准备工作,用测试脚本连接(如果连接出错------b'DB-Lib error message 20002,试下在connect函数参数最后面加上tds_version="7.0" 或者其他值)。

复制代码
import pymssql

server = '(local)'
database = '订单信息'
username = 'sa'
password = '123456'
# 连接到数据库
conn = pymssql.connect(server=server, user=username, password=password, database=database,tds_version="7.0")#最后一个参数不是必须的
# 创建游标对象
cursor = conn.cursor()
print('连接成功!')
# 关闭数据库连接
conn.close()

四、数据导入函数

我们成功连接了数据库以后,可以很方便的导出导入数据,以下是一个将数据导入数据库的函数实现

复制代码
#coding=utf-8
import time
import pymssql
import pandas as pd

def insert_data_to_sql(df, server, database, username, password, table_name,mode='Overlay'):
    # 连接到数据库
    conn = pymssql.connect(server=server, user=username, password=password, database=database)
    # 创建游标对象
    cursor = conn.cursor()
    # 获取 DataFrame 对象的字段名和数据类型
    columns = list(df.columns)
    dtypes = df.dtypes
    if mode=='Overlay':
        try:
        #覆盖模式
            cursor.execute("DROP TABLE {}".format(table_name))
        except:
            print('表不存在,直接创建......')
        # 构造创建表的 SQL 语句
        create_table_sql = f'CREATE TABLE [{table_name}] ('
        for col_name, col_type in zip(columns, dtypes):
            if col_type == 'int64':
                create_table_sql += f'[{col_name}] BIGINT,'
            elif col_type == 'float64':
                create_table_sql += f'[{col_name}] FLOAT,'
            elif col_type== 'datetime64[ns]' or '时间' in col_name or '日期' in col_name:
                create_table_sql += f'[{col_name}] DATETIME2(0),'
            elif col_type == 'date':
                create_table_sql += f'[{col_name}] DATE,'
            else:
                create_table_sql += f'[{col_name}] NVARCHAR(max),'
        create_table_sql = create_table_sql.rstrip(',') + ');'
        cursor.execute(create_table_sql)
    # 将 DataFrame 转换成元组列表
    data = [tuple(row) for row in df.fillna(0).values.tolist()]
    # 构造插入数据的 SQL 语句
    insert_sql = f'INSERT INTO [{table_name}] ('
    insert_sql += ','.join([f'[{col_name}]' for col_name in columns]) + ') VALUES ('
    insert_sql += ','.join(['%s'] * len(columns)) + ');'

    # 将数据插入到数据库
    cursor.executemany(insert_sql, data)
    # 提交事务
    conn.commit()
    # 关闭数据库连接
    conn.close()
   # 数据库连接参数

以上是python连接SQL SEVER数据库的全部流程,如果你遇到任何问题,欢迎评论区留言~

相关推荐
qq_366086221 小时前
union all几个常见问题及其解决方案
数据库
失去妙妙屋的米奇3 小时前
matplotlib数据展示
开发语言·图像处理·python·计算机视觉·matplotlib
搞不懂语言的程序员3 小时前
备忘录模式深度解析与实战案例
数据库·python·备忘录模式
爱的叹息4 小时前
关于 JDK 中的 jce.jar 的详解,以及与之功能类似的主流加解密工具的详细对比分析
java·python·jar
Lhuu(重开版4 小时前
2025第十六届蓝桥杯PythonB组部分题解
python
程丞Q香4 小时前
python——学生管理系统
开发语言·python·pycharm
手揽回忆怎么睡5 小时前
mongodb学习
数据库·学习·mongodb
dragon_perfect5 小时前
ubuntu22.04上设定Service程序自启动,自动运行Conda环境下的Python脚本(亲测)
开发语言·人工智能·python·conda
LL1681995 小时前
SSM考研助手管理系统
java·服务器·开发语言·数据库·学习
胡萝卜糊了Ohh6 小时前
利用IDEA开发Spark-SQL
sql·spark·intellij-idea