Python 3.9连接MySQL数据库报错,求正确的数据获取实现方案
Python 3.9连接MySQL并获取数据的正确方法
问题根源
你混淆了R的DBI语法和Python的数据库操作逻辑:
- 导入
pyodbc却调用R风格的dbConnect(MySQL()),Python中无此写法 - 报错
SyntaxError的直接原因是参数传递顺序错误,但核心问题是用错了数据库驱动库
推荐方案:使用官方驱动mysql-connector-python
这是MySQL官方推荐的Python驱动,操作逻辑和你的R代码接近,适配Python 3.9。
步骤1:安装依赖库
pip install mysql-connector-python pandas
步骤2:完整实现代码
import mysql.connector from mysql.connector import Error import pandas as pd # 数据库配置参数 db_user = 'k' db_password = 'F6' db_name = 'meg' db_table = 'dat' db_host = 'my.g2s' db_port = 3306 try: # 建立数据库连接 db_conn = mysql.connector.connect( user=db_user, password=db_password, host=db_host, port=db_port, database=db_name ) if db_conn.is_connected(): # 执行查询并直接转为DataFrame query = f"SELECT * FROM {db_table}" df = pd.read_sql(query, db_conn) print("数据获取成功") # 打印前5行验证结果 print(df.head()) except Error as e: print(f"数据库操作出错: {e}") finally: # 确保关闭连接释放资源 if db_conn.is_connected(): db_conn.close()
可选方案:使用pymysql分步操作
如果更习惯类似R的分步执行逻辑,可以用pymysql实现:
步骤1:安装依赖库
pip install pymysql pandas
步骤2:代码实现
import pymysql import pandas as pd # 数据库配置参数 db_user = 'k' db_password = 'F6' db_name = 'meg' db_table = 'dat' db_host = 'my.g2s' db_port = 3306 # 建立连接 connection = pymysql.connect( host=db_host, port=db_port, user=db_user, password=db_password, database=db_name ) # 创建游标执行查询 cursor = connection.cursor() cursor.execute(f"SELECT * FROM {db_table}") # 获取所有数据并转为DataFrame rows = cursor.fetchall() columns = [desc[0] for desc in cursor.description] df = pd.DataFrame(rows, columns=columns) # 关闭游标和连接 cursor.close() connection.close() # 输出结果 print(df.head())
关键注意事项
- 不要混用驱动:
pyodbc主要用于SQL Server、Access等数据库,MySQL优先选择官方驱动或pymysql - Python 3.9支持f-string格式化SQL语句,比字符串拼接更简洁安全
- 必须处理连接异常,操作完成后关闭连接,避免资源泄漏
内容的提问来源于stack exchange,提问作者psysky
相关产品推荐
相关产品推荐

