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...