python 将中文写入mysql

本文探讨了在Python中如何正确处理与MySQL交互时的Unicode编码问题,包括设置数据库连接的字符集、Python代码文件的编码声明,以及如何确保中文数据在读取和写入时的正确性。

设置mysql中的charset是UTF-8的,然后在python代码文件中设置#coding=utf-8。python从mysql获取数据时,会将数据转成unicode码

# -*- coding: utf-8 -*-
import sys
import MySQLdb
import json

reload(sys)
sys.setdefaultencoding("utf-8")

db="xxx"
user="xxx"
passwd="xxx"
host="xxx"
port=zzz
charset="utf8"

dbconn = MySQLdb.connect(host=host, db=db, port=port, user=user, passwd=passwd, charset=charset, autocommit = True)
cursor = dbconn.cursor()

sql = 'select name,id from t1'
cursor.execute(sql)
rows = cursor.fetchall()
rows[0][0]  ### 类型为unicode
str(rows[0][0])  ### 类型为str,若要将中文插入Mysql中,使用这种方式

d = {"1": "我", "2": "们"}
json.dumps(d) ### 字典中的value会转成unicode的形式,插入mysql时,不会显示中文
json.dumps(d,ensure_ascii=False)  ### 若要将中文插入Mysql中,使用这种方式

 

### 使用 Python 将 CSV 文件中的数据导入 MySQL 数据库 #### 准备工作 为了实现这一功能,需要确保已安装 `pandas` 和 `sqlalchemy` 库。如果尚未安装这些依赖项,则可以运行以下命令来完成安装: ```bash pip install pandas sqlalchemy mysql-connector-python ``` 此外,在 MySQL 配置文件 (`my.ini`) 中需启用本地文件加载支持[^2]。 --- #### 方法一:逐行读取并插入 此方法适用于较大的 CSV 文件或仅需处理特定列的情况。以下是具体代码: ```python import csv import mysql.connector # 连接至 MySQL 数据库 db_connection = mysql.connector.connect( host="localhost", user="your_username", password="your_password", database="your_database" ) cursor = db_connection.cursor() # 打开 CSV 文件 with open('data.csv', 'r', encoding='utf-8') as csvfile: reader = csv.DictReader(csvfile) for row in reader: sql_query = """ INSERT INTO your_table (column1, column2, column3) VALUES (%s, %s, %s); """ values = ( row['Column1'], # 替换为实际的 CSV 列名 row['Column2'], row['Column3'] ) cursor.execute(sql_query, values) db_connection.commit() cursor.close() db_connection.close() ``` 上述代码会逐一解析每一行,并将其插入到目标表中[^1]。 --- #### 方法二:利用 Pandas 处理整个 DataFrame 并批量插入 这种方法适合中小型数据集,能够显著提升性能。 ```python import pandas as pd from sqlalchemy import create_engine # 加载 CSV 文件 df = pd.read_csv('data.csv') # 创建 SQLAlchemy 引擎连接字符串 engine = create_engine('mysql+mysqlconnector://username:password@host/database_name') # 插入数据MySQL 表 df.to_sql(name='target_table', con=engine, if_exists='append', index=False) ``` 注意:在执行前应确认 CSV 的编码格式是否正确。若发现乱码问题,可参照文档调整文件编码设置[^3]。 --- #### 注意事项 1. **字段映射** 如果只需导入部分字段而非全部内容,则应在 SQL 查询语句以及 Pandas 导出过程中明确指定所需列。 2. **性能优化** 对于超大数据量场景,建议采用分批提交方式减少内存占用;或者借助 LOAD DATA INFILE 命令直接由 MySQL 完成高效加载。 3. **异常捕获** 实际应用时还需加入必要的错误检测逻辑以应对潜在失败情况。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值