database = 'qx2****'
# 进行创建数据库的连接
#conn = pymysql.connect(host=Host, user=user, password=pwd, port=port, db=database,local_infile=1)
#需要导入文件需要增加 infile
conn = pymysql.connect(host=Host, user=user, password=pwd, port=port, db=database)
##print(conn)
return conn
利用链接对象建立游标
def db_excute_sql(sql):
db=mysqlconn()
db.set_charset('utf8')
cursor = db.cursor()
cursor.execute(sql)
db.commit()
except pymysql.Error as e:
print(e)
return e
finally:
db.close()
单独测试一条sql命令
sql="truncate new_t"
db_excute_sql(sql)
如果把多个sql命令组成list逐条执行可以再编写一个参数是list的函数
def db_excute_sql_list(sql_list):
db=mysqlconn()
db.set_charset('utf8')
cursor = db.cursor()
for sql in sql_list:
cursor.execute(sql)
db.commit()
except pymysql.Error as e:
print(e)
return e
db.close()
测试多个sql命令的list
sql_l=[]
sql="truncate new_t"
sql_l.append(sql)
sql=" LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/test1.csv' INTO TABLE new_t FIELDS TERMINATED BY ',' lines terminated by '\\r\\n' ignore 1 lines (id, nameqqq,new_tcol);"
sql_l.append(sql)
sql="insert into new_ttt(nameqqq, data) SELECT nameqqq, data FROM new_t"
sql_l.append(sql)
db_excute_sql_list(sql_l)
把文件导入临时表,让后再mysql中进行追加,这应该最快的大批量追加数据的方法。
特别注意,成功执行 LOAD DATA INFILE 命令需要有比较复杂的设置。
你必须要在mysql测试成功以后再可以在python中调用这个命令。
你可能会会遇到如下错误
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '工作簿1.csv LOAD DATA INFILE 'd:/工作簿1.csv' -> INTO TABLE new_t ' at line 1
#忘记什么原因了
Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
#数据库都在安全模式,没有开启导入功能
Error Code: 29. File 'C:\ProgramData\MySQL\MySQL Server 8.0\Data\ProgramDataMySQLMySQL Server 8.0Uploads est1.csv' not found (OS errno 2 - No such file or directory)
Error Code: 29. File 'C:\ProgramData\MySQL\MySQL Server 8.0\Data\ProgramDataMySQL est1.csv' not found (OS errno 2 - No such file or directory)
Error Code: 29. File 'C:\ProgramData\MySQL\MySQL Server 8.0\Data\qx202204\test1.csv' not found (OS errno 2 - No such file or directory)
#导入文件路径secure_file_priv设置不对,导致导入文件路径不正常,其实到最后我也没有搞明白,我用的默认路径C:\ProgramData\MySQL\MySQL Server 8.0\Data\
Error Code: 1366. Incorrect string value: '\xC4\xE3' for column 'name' at row 1
#导入的文件使用的是GB2312不是UTF8
Error Code: 1300. Invalid utf8mb4 character string: '3'
#数据库的编码不对
可以参考文章
(2条消息) mysql提示错误[Error Code] 1290 - The MySQL server is running with the --secure-file-priv option解决办法..._Claire_ljy的博客-CSDN博客(2条消息) LOAD DATA INFILE使用与详解_longzhoufeng的博客-CSDN博客
上面的sql命令都是操作数据库的,没有返回值
执行既有返回值的查询命令可以使用这个函数
def sql_to_list(str_sql):
sql_list=[]
conn = mysqlconn()
# 获取游标
cursor = conn.cursor()
cursor.execute(str_sql)
results = cursor.fetchall()
for r in results:
sql_list.append(r)
cursor.close()
conn.close()
return sql_list
把数据的表直接导出文件
from sqlalchemy import create_engine
import pandas as pd
def msg_to_excel(sql, saveto):
engine = create_engine('mysql+pymysql://newuser:¥¥¥¥¥@127.0.0.1:3306/qx2####204')
df_read = pd.read_sql_query(sql, engine)
df_read.to_excel(saveto, index=True)
return "导出文件完成。"
github:https://github.com/PyMySQL/PyMySQL
Python3 MySQL 数据库连接 - PyMySQL 驱动:https://www.runoob.com/python3/python3-mysql.html
pymysql 是线程安全的( 搜索 thread,可以看到 thread_safe=1,同时函数 t...
sqlalchemy python批量插入数据有两种方法
第一种:for循环插入,再此不介绍,只要会单条插入就可以使用for循环插入
第二种:pandas pd.to_sql()方法
第一步:创建连接
from sqlalchemy import create_engine
def db_config():
DATABASES = {
'ENGINE': 'mysqlconnector',
'USER': 'root',
'PASSWORD': 'r
由于上篇文章中批量修改了文件,有的时候数据库也需要批量修改一下,之前的做法是使用宝塔的phpMyAdmin导出一个已经修改好了的sql文件,然后依次去其他数据库里导入,效率不说极低,也算低了,且都是些重复性的劳动,所以打算用Python来批量执行sql
版本:Python3.6
系统:MacOS
IDE:PyCharm
第三方库:pymysql
Show Code
import pymysql
host = 'xxx.65.9.191'
username = 'root'
password = 'root'
def connectMySQL():
print('
这篇Python学习教程你那个学会了加以转化也是一个技能哦,如何批量修改数据库执行Sql文件
有时候咱们批量修改了文件,有的数据库也需要批量修改一下,之前的做法是使用宝塔的phpMyAdmin导出一个已经修改好了的sql文件,然后依次去其他数据库里导入,效率不说极低,也是非常低了,且都是些重复性的劳动,所以打算用Python来批量执行sql
版本:Python3.6
系统:MacOS
ID...