MacOS Mojave下Spyder(Python3)连接MySQL报AttributeError问题求助
解决MySQL Connector连接错误及代码问题
先来说你遇到的核心错误:AttributeError: module 'mysql' has no attribute 'connector',这通常是包安装或导入冲突导致的,然后再帮你排查代码里的其他问题。
一、修复Connector连接错误
1. 确保安装正确的Python包
你需要安装的是mysql-connector-python(官方维护的版本),而不是旧的mysql-connector。在Mac的bash里执行:
pip3 uninstall mysql-connector mysql-connector-python pip3 install mysql-connector-python
注意用pip3对应你的Python3环境,避免和系统默认的Python2混淆。
2. 排查命名冲突
检查你的项目目录里:
- 有没有名为
mysql.py的文件(会覆盖官方包) - 有没有名为
mysql的文件夹(同样会导致导入错误)
如果有,重命名这些文件/文件夹,然后重启Spyder再测试。
3. 验证导入是否正常
在Spyder的控制台里单独执行:
import mysql.connector print(mysql.connector.__version__)
如果能打印出版本号,说明导入正常,再运行你的代码。
二、代码里的其他错误(必须修复,否则连接成功后也会报错)
1. 列表定义错误
你的first_names和last_names把所有名字放在了一个字符串里,导致列表只有一个元素。正确的写法是每个名字单独用引号:
first_names = ['Jodee', 'Marielle', 'Phillip', 'Colby', 'Stephany', 'Dione', 'Grover', 'Napoleon', 'Nicholas', 'Alysa', 'Noma', 'Leta', 'Ciera', 'Donny', 'Buc', 'Iren', 'Renato', 'Glory', 'Stacia', 'Bennie', 'Soo', 'Mitzie', 'Kaci', 'Peggy', 'Hilma', 'Melva', 'Cindie', 'Miyoko', 'Melina', 'Cammy', 'Blanche', 'Rhea', 'Jill', 'Kellye', 'Ailene', 'Vida', 'Alva', 'Sau', 'Hollis', 'Oswaldo', 'Marty'] last_names = ['Bula', 'Bibi', 'Rolf', 'Tayna', 'Ardith', 'Art', 'Jeannetta', 'Patrina', 'Ronny', 'Maida', 'Cleopatra', 'Sherry', 'Vincenza', 'Sheri', 'Sherlyn', 'Shayne', 'Geneva', 'Javier', 'Celine', 'Saran', 'Shari', 'Boris', 'Gwyneth', 'Summer', 'Maryellen', 'Rufina', 'Essie', 'Palma', 'Rafael', 'Cordell', 'Jude', 'Jenine', 'Manuel', 'Cleveland', 'Daphine', 'Lavina', 'Candi', 'Rossie', 'Brunilda', 'Gilberte', 'Nick', 'Hoyt', 'Lucius', 'Ardis', 'Tyler', 'Dwain', 'Caleb', 'Aide', 'Mckinley', 'Margurite']
2. 列表索引错误
你用了first_names(fkey)来获取元素,这是函数调用的语法,列表应该用方括号索引:first_names[fkey],同理last_names[lkey]。
3. 随机数生成位置错误
你把fkey和lkey定义在循环外面,导致每次循环插入的都是同一个名字。应该把随机数生成放在循环内部,每次生成新的名字:
for i in range(nkey): fkey = random.randint(0, len(first_names)-1) # 用len避免索引越界 lkey = random.randint(0, len(last_names)-1) query = 'insert into test values(%s,%s,%s,%s,%s)' # 是values不是value tup = ('L5W4NW', first_names[fkey], last_names[lkey], '2970', 'completed') mycursor.execute(query, tup)
另外注意SQL语句里是values而不是value,虽然有些数据库允许,但规范写法是values。
4. 避免索引越界
用len(first_names)-1代替固定的49,这样如果列表长度变化,不会出现索引超出范围的错误。
三、最终修正后的代码
import mysql.connector import random # 修正列表定义 first_names = ['Jodee', 'Marielle', 'Phillip', 'Colby', 'Stephany', 'Dione', 'Grover', 'Napoleon', 'Nicholas', 'Alysa', 'Noma', 'Leta', 'Ciera', 'Donny', 'Buc', 'Iren', 'Renato', 'Glory', 'Stacia', 'Bennie', 'Soo', 'Mitzie', 'Kaci', 'Peggy', 'Hilma', 'Melva', 'Cindie', 'Miyoko', 'Melina', 'Cammy', 'Blanche', 'Rhea', 'Jill', 'Kellye', 'Ailene', 'Vida', 'Alva', 'Sau', 'Hollis', 'Oswaldo', 'Marty'] last_names = ['Bula', 'Bibi', 'Rolf', 'Tayna', 'Ardith', 'Art', 'Jeannetta', 'Patrina', 'Ronny', 'Maida', 'Cleopatra', 'Sherry', 'Vincenza', 'Sheri', 'Sherlyn', 'Shayne', 'Geneva', 'Javier', 'Celine', 'Saran', 'Shari', 'Boris', 'Gwyneth', 'Summer', 'Maryellen', 'Rufina', 'Essie', 'Palma', 'Rafael', 'Cordell', 'Jude', 'Jenine', 'Manuel', 'Cleveland', 'Daphine', 'Lavina', 'Candi', 'Rossie', 'Brunilda', 'Gilberte', 'Nick', 'Hoyt', 'Lucius', 'Ardis', 'Tyler', 'Dwain', 'Caleb', 'Aide', 'Mckinley', 'Margurite'] # 连接数据库(确保前面的Connector问题已解决) mydb = mysql.connector.connect(host='localhost', user='root', passwd='hariom21feb', database='test') mycursor = mydb.cursor() nkey = random.randint(0, 50) for i in range(nkey): # 每次循环生成新的随机索引 fkey = random.randint(0, len(first_names)-1) lkey = random.randint(0, len(last_names)-1) # 修正SQL语句的values拼写 query = 'insert into test values(%s,%s,%s,%s,%s)' tup = ('L5W4NW', first_names[fkey], last_names[lkey], '2970', 'completed') mycursor.execute(query, tup) mydb.commit() # 记得关闭连接 mycursor.close() mydb.close()
按照上面的步骤先解决Connector的安装和冲突问题,再修正代码里的错误,应该就能正常运行了。
内容的提问来源于stack exchange,提问作者Ritvik Rao
相关产品推荐
相关产品推荐

