python 读写mysql数据库(包括批量插入和批量更新)
1、安装python库sqlalchemy2、用法如下from sqlalchemy import create_enginemysql_ip = ""mysql_port = 30000mysql_database = ""mysql_username = ""mysql_password = ""mysql_table = ""engine = create_engine("mysql+pym
·
目录
一、读取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万条数据
更多推荐
已为社区贡献1条内容
所有评论(0)