用pycharm的pymssql连接,出现错误,加了charset字段也不行,想有人能帮我远程一下
试一下下面的demo,希望可以解决你的问题
#coding=utf-8
# sqlserver的连接
import pymssql
class MSSQL:
def __init__(self,host,user,pwd,db):
self.host = host
self.user = user
self.pwd = pwd
self.db = db
def __GetConnect(self):
"""
得到连接信息
返回: conn.cursor()
"""
if not self.db:
raise(NameError,"没有设置数据库信息")
self.conn = pymssql.connect(host=self.host,user=self.user,password=self.pwd,database=self.db,charset="utf8")
cur = self.conn.cursor()
if not cur:
raise(NameError,"连接数据库失败")
else:
return cur
def ExecQuery(self,sql):
"""
执行查询语句
返回的是一个包含tuple的list,list的元素是记录行,tuple的元素是每行记录的字段
"""
cur = self.__GetConnect()
cur.execute(sql)
resList = cur.fetchall()
#查询完毕后必须关闭连接
self.conn.close()
return resList
def ExecNonQuery(self,sql):
"""
执行非查询语句
调用示例:
cur = self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
"""
cur = self.__GetConnect()
cur.execute(sql)
self.conn.commit()
self.conn.close()
def main():
# host默认为127.0.0.1,如果打开了TCP动态端口的需要加上端口号,如'127.0.0.1:1433'
# user默认为sa
# pwd为自己设置的密码
# db为数据库名字
ms = MSSQL(host='127.0.0.1',user="sa",pwd="123456",db="pubs")
resList = ms.ExecQuery("SELECT * FROM titles")
print(resList)
if __name__ == '__main__':
main()
要用局域网下的IP地址,先在本地ping ip看下是否连通。
有异常的话,提供相关的错误信息吧
把你当前的连接方式发一下
可能的原因及解决办法:
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 - python如何连接sql server数据库_Ainke的博客-CSDN博客_python连接sql server
简单连接的话
#coding=utf-8 #settng设置全局为utf—8格式
#导包
import pymssql
#创建连接字符串 (sqlserver默认端口为1433)
conn =pymssql.connect(host='localhost', #这里的host='_'可以用本机ip或ip+端口号
server="******",#本地服务器
port="1433",#TCP端口
user="sa",password="******",
database="******",
charset="GBK"
#这里设置全局的GBK,如果设置的是UTF—8需要将数据库默认的GBK转化成UTF-8
)
if conn:
print('连接数据库成功!')#测试是否连接上
连接失败的话,可能原因
1、防火墙端口未开放,关闭防火墙,或添加1433端口;
2、数据库服务是否开启;