说实在的能遇到的错误差不多都遇到了,学生小白自己搞有点困难(不得不说新的错误一个接一个真的很崩溃qvq),在查阅参考各位大佬的文章及一些知识的相关资料,最终完成连接。
若有不足之处,望各位大佬指正。
目录
1、数据库无法连接服务器
2、检测自己的SQL Sever是否有打开密码功能
3、建立空数据库并建立一个专属用户
4、打开1433端口
5、在pycharm中测试
6、SQL Sever在pycharm中的导入数据
第一步就有问题,使用Windows身份验证连接自己的服务器无法登录。
解决方法:右击电脑->管理
点击服务和应用程序->SQL Server配置管理器->SQL Server服务
点击SQL Server服务后,双击SQL Server(SQLEXPRESS)把登录身份改为内置账户并选择为Network Service。
查阅资料时大部分说是需要启动SQL Server所有服务即可,但是我的SQL Server代理无论手动还是自动都无法启动,以为是因为SQL Server代理无法启动的原因,查资料说可能和版本有关(这里的资料蛮少的)等等很复杂,所以这里浪费了一些时间。 后来在看了一堆资料里,有一则说可能是登陆身份的账户问题,试了一试成功啦!(光代理无法启动这里把我难受住了)
右击点击属性
属性->安全性->点击SQL Server和Windows身份验证模式,点击确定
(1) 在sqlserver中建立,首先需要点击新建查询并且执行以下操作:
执行会出现一个smallfish的新数据库(smallfish是我自己起的数据库名称,可以其自己喜欢的名字,后续需要放在pycharm里使用)
(2)右击登录名->新建登录名
(3)编辑登录名(xiaofish是我自己的用户名,后续需要放在pycharm里)
(4)选择SQL Server身份验证,自定义密码(我这里是123456,定的简单点就好);
并且把强制实施密码策略(后边括号内为F、X、U)的对号去掉(否则后边会遇到各种登录问题)
(5)点击用户映射,将你自己建的数据库打勾(上边自己新建的数据库smallfish,这里也显示了自己编辑的用户名);并且将下边的db_ower对勾选中:
(6)(接下来进行验证)点击左上角先断开连接 ,再点击左边的连接对象资源管理器;
(7) 点击SQL Sever 身份验证并输入账号密码,如果成功连接,就会进入数据库,你只能对你用户(xiaofish)对应的数据库(smallfish)进行各种操作:
首先需要检测自身的 1433 端口是否打开(一般都需要自己打开)
1433应该是电脑的一个端口,可以链接电脑的(我也不是非常清楚知道是干什么的,跟着各位大佬的步伐走)
(1)点击:win和R,输入cmd点击回车出现如下界面:
输入telnet localhost 1433并点击回车
一般会出现错误:
'telnet' 不是内部或外部命令,也不是可运行的程序
点击:win和R,输入control点击回车出现如下界面:
点击程序(小心不要点到卸载程序!!!)
点击Telnet客户端
再次重复win和R,输入cmd点击,输入telnet localhost 1433并点击回车出现错误:正在连接localhost...无法打开到主机的连接。 在端口 1433: 连接失败....。没关系进行下一步!
禁用所有上述出现的程序(一定要做,我看大佬的内容是要禁用,我自己是把他们都全部暂停也可以完成后续操作)禁用操作是双击其中一个选项,常规中的启动类型选择禁用
点击SQL Sever网络配置,然后点击MSSQLSEVER的协议:
将已启用更改为“是”:
点击ip地址将IP1、IP2的已启用改为是 以及 TCP端口更改为1433 ,如图:
找到IPAll把TCP动态端口改为1433,然后点击应用(不是确定):
完成上述操作后重启电脑,重新打开该软件,然后再将下边的东西改成启动,SQL Sever代理启动失败与否都不会影响SQL Sever的使用。(这里的SQL Sever代理启用真的是烦了我好久,看了大佬的文章才知道启不启用都没有关系):
启动win和R,输入cmd点击回车,并在其中输入telnet localhost 1433 出现下边的页面说明1433配置成功:
pymssql库的安装:
1.在Pycharm中,依次点击File(文件)—>Settings(设置)–>Project(项目)–>Project Interpreter (项目解释器)点击右侧“+”号,输入自己需要导入包的名称,在下面列表中可以看到自己需要的包
2.点击 install package 安装完成就ok了。
在pycharm中 建立新文件并输入以下代码并执行:
import pymssql
connect = pymssql.connect(host='localhost',server='LAPTOP-P4HI651C',port='1433',user='xiaofish',password='123456',database='smallfish')
#host不需要改变参数,server改成自己的服务器名称,port不改变参数,user自己的用户名,password自己的密码,database你自己的数据库名称
if connect:
print("数据库连接成功!")
else:
print("数据库连接失败!")
连接成功下方会给出提示 :恭喜你的pycharm和SQL Sever链接成功啦!!!
如果大量导入数据(导入数据前需要在sql sever里建立好表格),使用bulk函数,(这里是借鉴大佬的代码,后续需要自己学习bulk函数):
bulk insert soft2110 #txt插入到soft2110表格中
from 'd:2104.txt' #txt在D盘而且需要把编码更改为ANSI
with(fieldterminator = '\t',rowterminator = '\n')
#\t是每行以空格分割,\n是根据换行将表格导入。
需要更改登录名的权限,打开方式如下:点击登录名->自己设置的用户名(我的是xiaofish)->点击sysadmin
这里可能会出现如图“sysadmin”添加成员失败,这是因为用了SQL Server和Windows身份验证模式登录的原因,需要登录Windows身份验证模式的进行上一步操作就可以啦!
在sql sever里建立表格时需要以下注意:(我自己解释不清楚,直接引用CSDN博主「٩( 'ω' )و 君莫笑」大佬的内容,原文链接:https://blog.csdn.net/m0_66722981/article/details/129792945 )
在声明表格变量时不要用nvarchar,varchar,因为这两个声名的字符串编码是GBK编码,如果在pycharm里插入数据时会因为pycharm执行过程使用utf-8编码导致插入后乱码。所以在声明table时字符串尽量用nchar(20),这种方式是utf-8编码,其中的数字20是字符串的大小,一个汉字大概能占用2个位置,所以声明的大小不能太大,更不能过小。
use smallfish
drop table soft2110
create table soft2110(xh int,
dp nchar(20),
pr nchar(20),
id nchar(30),
nm nchar(20))
bulk insert soft2110 --txt text
from 'd:2104.txt'
with
(fieldterminator='\t',
rowterminator='\n'
)--\t是空格
delete from soft2110 where xh=71
这里我出现了一些错误:大容量插入: 在数据文件中遇到意外的文件结尾 (EOF),查阅资料以及其他大佬的博客,了解到可能是:是分隔符的问题 ,看看是不是文本中哪里的空格出了问题。可能是换行/结束符有隐藏的未知符号。我自己是把文本中不同信息之间换成“Tab”键隔开,就没有问题了
示例需要在D盘建立2104.txt文件(不同信息用Tab键隔开),示例数据是:
1 计算机学院 物联网2102 1212123 小白鱼
2 计算机学院 物联网2102 1213122 小炸鱼
注意,保存后需要另存为D盘的2104.txt文件进行替换,编码变成ANSI ,操作如下:
双击2104.txt文件->点击左上角文件->另存为->改变编码为ANSI(如下图)
在连接成功后的pycharm里加入以下代码,实现对上述的表格实现查找(这里也是看大佬的博客学习到的):
cur = connect.cursor()
sqlstr = "select * from soft2110"
cur.execute(sqlstr)
data = cur.fetchall()
cur.close()
for i in range(len(data)):
for t in range(len(data[i])):
print(str(data[i][t]).strip(), end=' ')
print('\r')
connect.close()
得到如图下方输出,注意执行之后关闭了游标和连接(如果是带循环的操作可以将connect.close()放在退出循环操作执行,最后再断开与sql sever的连接;断开游标: cur.close() 游标用的时候打开,不用的时候随即关闭): (这里直接引用CSDN博主「٩( 'ω' )و 君莫笑」大佬的解释)
(查阅资料一位大佬的评论感觉很精炼)
***.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:
host:MySQL服务器名
user:数据库使用者
password:用户登录密码
db:操作的数据库名
charset:使用的字符集(一般是gb2312)
cursor = ***.cursor() 其实就是用来获得python执行Mysql命令的方法,也就是
我们所说的操作游标
下面***.execute则是真正执行MySQL语句,即查询TABLE_PARAMS表的数据。
至于fetchall()则是接收全部的返回结果行 row就是在python中定义的一个变量,用来接收返回结果行的每行数据。同样后面的r也是一个变量,用来接收row中的每个字符,如果写成C的形式就更好理解了
for(string row = ''; row<= ***.fetchall(): row++)
for(char r = ''; r<= row; r++)
printf("%c", r);
超级感谢CSDN博主@٩( 'ω' )و 君莫笑大佬的内容,原文链接:https://blog.csdn.net/m0_66722981/article/details/129792945,非常有帮助!!!
写的并不是很好,还有许多地方需要进步,希望各位大佬指正!