鱼C论坛

 找回密码
 立即注册
查看: 7787|回复: 14

[已解决]用pymysql连不上数据库

[复制链接]
发表于 2017-6-20 10:57:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
环境:
        SQL:SQL SERVER R2
        Windows7 64位
        Python3.6
        pip 的 pymysql

数据库:
        本地数据库
        库名:test
        账号:sa
        密码:123456
        端口:没改过,默认的1433


在编辑器的代码,基本都套用网上的代码:
  1. import pymysql
  2. import pymysql.cursors
  3. db=pymysql.connect(host="localhost",user="sa",password="123456",db="test",port=1433,charset="utf8")
  4. cur=db.cursor()

  5. sql="select * from test"

  6. try:
  7.     cur.execute(sql)

  8.     results=cur.fetchall()
  9.     for row in results:
  10.         print(row)
  11. except Exception as e:
  12.     raise e
  13. finally:
  14.     db.close()
复制代码




在IDLE的报错:

  1. Python 3.6.1rc1 (v3.6.1rc1^0:e0fbe5feee4f9c00f09eb9659c2182183036261a, Mar  4 2017, 20:00:12) [MSC v.1900 64 bit (AMD64)] on win32
  2. Type "copyright", "credits" or "license()" for more information.
  3. >>> import pymysql
  4. >>> import pymysql.cursors
  5. >>> db=pymysql.connect(host="localhost",user="sa",password="123456",db="test",port=1433,charset="utf8")
  6. Traceback (most recent call last):
  7.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 1021, in _read_bytes
  8.     data = self._rfile.read(num_bytes)
  9.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\socket.py", line 586, in readinto
  10.     return self._sock.recv_into(b)
  11. ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

  12. During handling of the above exception, another exception occurred:

  13. Traceback (most recent call last):
  14.   File "<pyshell#2>", line 1, in <module>
  15.     db=pymysql.connect(host="localhost",user="sa",password="123456",db="test",port=1433,charset="utf8")
  16.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\__init__.py", line 90, in Connect
  17.     return Connection(*args, **kwargs)
  18.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 706, in __init__
  19.     self.connect()
  20.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 931, in connect
  21.     self._get_server_information()
  22.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 1245, in _get_server_information
  23.     packet = self._read_packet()
  24.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 987, in _read_packet
  25.     packet_header = self._read_bytes(4)
  26.   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 1029, in _read_bytes
  27.     "Lost connection to MySQL server during query (%s)" % (e,))
  28. pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query ([WinError 10054] 远程主机强迫关闭了一个现有的连接。)')
复制代码



看了下文档,没太明白pymysql的参数传递逻辑,查了网上的范例等也没找到原因,求指导。。。。
最佳答案
2017-6-21 09:06:32
本帖最后由 sunnychou 于 2017-6-21 09:11 编辑

我主要在我电脑上,用我自己的数据跑了一下,把那个端口关闭了,可以正常运行
  1. import pymysql
  2. import pymysql.cursors
  3. db=pymysql.connect(host="localhost",user="root",password="",db="cxt",charset="utf8")

  4. #user='root', passwd='', host='localhost', db='cxt',charset='utf8'
  5. cur=db.cursor()

  6. sql="select * from pl "

  7. try:
  8.     cur.execute(sql)

  9.     results=cur.fetchall()
  10.     for row in results:
  11.         print(row)
  12. except Exception as e:
  13.     raise e
  14. finally:
  15.     cur.close()
  16.     db.close()
复制代码

图片是结果
有帮助的话,给我一个最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-20 11:11:50 | 显示全部楼层
https://stackoverflow.com/questions/24889592/how-do-i-connect-to-microsoft-sql-server-2008-in-python
http://pymssql.org/en/stable/faq.html#cannot-connect-to-sql-server
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-20 11:21:46 | 显示全部楼层
你这个没看得太懂,我一般是这样连接数据库的:
  1. conn = pymysql.connect(host="127.0.0.1",user="root",passwd="123456",db="test",charset='utf8')
  2.         sql = "insert into user(name) values('"+rst[each]+"')"
  3.         #print(sql)
  4.         try:
  5.             conn.query(sql)
  6.             conn.commit()
  7.         except Exception as err:
  8.             print(err)
  9.     conn.close()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-20 11:27:42 | 显示全部楼层

这个是要换pymssql连接了,pymysql为什么不能连呢?好好奇,环境、代码感觉都没啥问题,就是连不上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-20 11:33:12 | 显示全部楼层
import pymysql
这个就是pymysql连接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-20 11:34:10 | 显示全部楼层
你代码里的host改为 127.0.0.1试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-20 11:35:05 | 显示全部楼层
和vvv 发表于 2017-6-20 11:21
你这个没看得太懂,我一般是这样连接数据库的:

关键我即使做断点在第二行,运行也完全没到第二行暂停 = =|| 第一行都没运行过去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-20 11:36:27 | 显示全部楼层
和vvv 发表于 2017-6-20 11:34
你代码里的host改为 127.0.0.1试试

试过的,也不行,有的密码那用password,有的用passwd,我都试过,运行之后等好久,估计是在超时,然后就报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-20 11:37:06 | 显示全部楼层
本帖最后由 和vvv 于 2017-6-20 11:38 编辑

db=pymysql.connect(host="localhost",user="sa",password="123456",db="test",port=1433,charset="utf8")
host改为host="127.0.0.1",user一般是user = "root"
如果你要用pymsql的话,本机必须装上mysql数据库(必须)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-20 11:42:50 | 显示全部楼层
如果你要用pymysql的话,本机必须装上mysql数据库(必须),并且要先建立好相应的数据库和表。
如果建立好了,基本没什么问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-20 13:58:48 | 显示全部楼层
mysql的默认端口不是3306么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-20 14:13:05 | 显示全部楼层
mr_yang4 发表于 2017-6-20 11:27
这个是要换pymssql连接了,pymysql为什么不能连呢?好好奇,环境、代码感觉都没啥问题,就是连不上

不然 SQLAlchemy 岂不是很尴尬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-21 09:06:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunnychou 于 2017-6-21 09:11 编辑

我主要在我电脑上,用我自己的数据跑了一下,把那个端口关闭了,可以正常运行
  1. import pymysql
  2. import pymysql.cursors
  3. db=pymysql.connect(host="localhost",user="root",password="",db="cxt",charset="utf8")

  4. #user='root', passwd='', host='localhost', db='cxt',charset='utf8'
  5. cur=db.cursor()

  6. sql="select * from pl "

  7. try:
  8.     cur.execute(sql)

  9.     results=cur.fetchall()
  10.     for row in results:
  11.         print(row)
  12. except Exception as e:
  13.     raise e
  14. finally:
  15.     cur.close()
  16.     db.close()
复制代码

图片是结果
有帮助的话,给我一个最佳
948FH5KNZW3FA1@EU)6ZX1H.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-6-23 08:33:32 | 显示全部楼层
sunnychou 发表于 2017-6-21 09:06
我主要在我电脑上,用我自己的数据跑了一下,把那个端口关闭了,可以正常运行

图片是结果

虽然最后我还是用pymssql连上的,但你这样实在让我不好意思不给分啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-23 08:57:08 | 显示全部楼层
mr_yang4 发表于 2017-6-23 08:33
虽然最后我还是用pymssql连上的,但你这样实在让我不好意思不给分啊

没什么不好意思啦,多多交流,谢谢楼主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-3 21:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表