python 读写mysql数据库(包括批量插入和批量更新)

目录

一、读取MySQL的数据

1、 sqlalchemy库

2、pymysql库

二、写数据到MySQL

1、逐条写

2、批量插入数据

3、批量更新数据


一、读取MySQL的数据

1、 sqlalchemy库

    
from sqlalchemy import create_engine

mysql_ip = ""
mysql_port = 30000
mysql_database = ""
mysql_username = ""
mysql_password = ""
mysql_table = ""

engine = create_engine("mysql+pymysql://{}:{}@{}:{}/{}".format(mysql_username, mysql_password, mysql_ip, mysql_port,mysql_database))

select_columns = ["", "", "", ""]
sql_query = ''.format(",".join(select_columns), mysql_table)

# 使用pandas的read_sql_query函数执行SQL语句,并存入DataFrame
df_read = pd.read_sql_query(sql_query, engine)
print(df_read)

2、pymysql库

import pymysql

con = pymysql.connect(
            host=host,
            port=port,
            user=user,
            password=password,
            db=database
        )
cur = con.cursor()

sql_command=""    

try:
    cur.execute(sql_command)
    data = cur.fetchall()
    df = pd.DataFrame(list(data), columns=columns)
    print("Success!")
except:
    df = pd.DataFrame()
    print("Failure!")

con.commit()
cur.close()
con.close()

二、写数据到MySQL

1、逐条写

def add_test_users():

    conn = connect(host='主机名', port='端口号', user='用户名', password='密码', database='数据库名', charset='utf8')
    cs = conn.cursor()  # 获取游标
    for num in range(0, 58000):
        try:
            sql = "insert into '表名'(字段名) values(值)"
            cs.execute(sql)
        except Exception as e:
            return
            
    conn.commit()  # 提交
    cs.close()
    conn.close()
    print('OK')

add_test_users()

2、批量插入数据

     通过这种方式批量向MySQL写数据时,需要注意的是,(value1, value2, value3, value4)这个里面的value值需要是string型的,或者NoneType类型的,不然会报错,因为后面的%s就是表示的是添加的字符串型的。

def add_test_users():
    
    usersvalues = []
    for num in range(1, 50000):
        usersvalues.append((value1, value2, value3, value4))  # 注意要用两个括号扩起来

    conn = connect(host='主机名', port='端口号', user='用户名', password='密码', database='数据库名', charset='utf8')
    cur = conn.cursor()  # 获取光标
    # 注意这里使用的是executemany而不是execute,下边有对executemany的详细说明
    cur.executemany('insert into table_name(column1, column2, column3, column4) values(%s,%s,%s,%s)', usersvalues)

    conn.commit()
    cur.close()
    conn.close()
    print('OK')

add_test_users()

 其它方式也可以参考:https://www.cnblogs.com/skgoo/p/10821110.html

3、批量更新数据

     也是通过executemany()批量 更新,注意这里的参数(value1, value2, value3, value4)里面的value4是跟底下的条件where column4=%s对应的。

     还有一个值得注意的是,用这种方式批量更新的时候其实也非常慢,但是如果给数据库中的某一列建立一个索引,批量更新的速度就非常非常快了。

def update_test_users():
    
    usersvalues = []
    for num in range(1, 50000):
        usersvalues.append((value1, value2, value3, value4))  # 注意要用两个括号扩起来

    conn = connect(host='主机名', port='端口号', user='用户名', password='密码', database='数据库名', charset='utf8')
    cur = conn.cursor()  # 获取光标
    # 注意这里使用的是executemany而不是execute,下边有对executemany的详细说明
    cs.executemany('update table_name set column1=%s, column2=%s, column3=%s where column4=%s', usersvalues)

    conn.commit()
    cur.close()
    conn.close()
    print('OK')

update_test_users()

还有一种非常高效的方式,可以参考:(Python)批量更新MySQL 42万条数据

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值