Python - python如何连接sql server数据库

Posted Ainke

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python - python如何连接sql server数据库相关的知识,希望对你有一定的参考价值。

一、安装第三方模块

首先要下载名为"pymssql"的模块,然后import该模块
安装方法 :1.第一种方法:按win+r----> 输入cmd—>输入以下命令即可

pip install pymssql

2.第二种方法:打开pycharm,点击File,再点击settings,点击settings之后再点击project下面的project Interpreter,在界面中点击+号,直接搜索pymssql模块,直接安装即可。

二、连接数据库

import pymssql

connect = pymssql.connect('服务器名称', '用户名', '密码', '库名')  # 建立连接
if connect:
    print("连接成功!")

cursor = connect.cursor()  # 创建一个游标对象python里的sql语句都要通过cursor来执行
sql = "select id,name, sex from student" #查询数据库信息
cursor.execute(sql)  # 执行sql语句
row = cursor.fetchone()  # 读取查询结果
while row:  # 循环读取所有结果
    print("id=%s,Name=%s,Sex=%s" % (row[0], row[1], row[2]))  # 输出结果
    row = cursor.fetchone()

cursor.close()
connect.close()

三、遇到的问题

在使用python连接数据库时出现了两个问题:
〔1〕因为连接数据库要使用sql身份验证,但之前一直使用的是windows验证,改为sql身份验证时出现了错误223,通过搜索引擎查询找到了解决方法:
(1):以windows验证模式进入数据库管理器。
(2):右击sa,选择属性:在常规选项卡中,重新填写密码和确认密码。把强制实施密码策略去掉。
(3):点击状态选项卡:勾选授予和启用。
(4):右击实例名称,选择属性。
(5):点安全性,确认选择了SQL SERVER 和Windows身份验证模式。
(6):配置TCP/IP,然后重启地打开’程序’-‘所有程序’-'Microsoft SQL Server 2008 ‘-‘配置工具’-‘SQL Server 配置管理器’,在弹出的窗体中,找到’SQL Server 2008 网络配置’,把’MSSQLSERVER的协议’下的"Named Pipes"和"TCP/IP"启动,然后重新启动Microsoft SQL Server 2008就可以了。
(7):重启SQLSERVER服务。
〔2〕在连接数据库时出现了报错:原因因为数据库参数中的数据库名称出现了错误导致无法连接到数据库,通过语句SELECT Name FROM Master…SysDatabases ORDER BY Name 查询到了当前所有数据库的名称,问题得以解决。

Python 与 SQL 外连接给出了不同的结果。为啥?

【中文标题】Python 与 SQL 外连接给出了不同的结果。为啥?【英文标题】:Python vs SQL outer joins give different results. Why?Python 与 SQL 外连接给出了不同的结果。为什么? 【发布时间】:2018-12-01 08:28:21 【问题描述】:

我在理解 Python (Pandas) FULL OUTER JOINS 和 Microsoft SQL Server 之间的区别时遇到了一些麻烦。在不深入数据的情况下,也许有人了解它们如何发挥不同作用的理论。 我正在并行运行这两个代码,以确保它在我学习 Python 时能够正常工作。

SQL 代码:

SELECT *
FROM
    (
        SELECT *
        FROM df1 a
        FULL OUTER JOIN df2 b
        on a.id_no=b.idno
    ) abc
FULL OUTER JOIN df3 c
on abc.id_no=c.idno

Python 代码:

TripleMerge = df1.merge(df2, left_on='id_no', right_on=df2['idno'].astype(np.int64), how='outer').merge(
        df3, left_on='id_no', right_on=df3['idno'].astype(np.int64), how='outer')

每个连接的第一部分给了我相同的行数 (2323) 第二部分总共产生 4951 行 SQL 和 4552 行 Python。我想不通。

一些线索: 如果不转换 int64,Python 不会让我加入“idno”。 我以相同的方式对 SQL 和 Python 中的所有 dfs 进行排序以控制排序。

如果您能想到任何可以调查的地方,请告诉我。或者,如果您知道如何更好地编写 Python 代码(或完全不同的方式来测试行输出,请告诉我)。

谢谢!

【问题讨论】:

更新:Python 是“正确”的。 SQL 代码更适合创建不同 IDno 的列表并执行 3 个左连接。 Python 通过从 IDno 或类似的东西创建索引来自动这样做 【参考方案1】:

在您的 python 示例中没有与 abc 选择等效的选项。很确定你的语法有点偏离。

在 SQL Server 中,您是说进行此连接,然后将其连接到另一个表的值上。

试试这个:

pd.merge(pd.merge(df1,df2,left_on='id_no', right_on='idno', how='outer'),df3,left_on='id_no', right_on='idno',how= '外')

【讨论】:

感谢建议的清理工作。不幸的是,这给了我与以前完全相同的代码。 SQL 版本仍然包含 399 额外的行。

以上是关于Python - python如何连接sql server数据库的主要内容,如果未能解决你的问题,请参考以下文章

Python和SQL Server 2017的强大功能

python如何连接sql server?

用sql se3ver连上数据库后如何断开连接,我一删除连接就直接删掉整个数据库啊T T

从 python 运行 sql 脚本时如何仅抑制 SQL*Plus 横幅消息

python读取数据库表数据并写入excel

Python 到 Netezza JDBC 连接在 Mac 上给出 SQL .execute 错误