python上传数据到MySQL数据库
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python上传数据到MySQL数据库相关的知识,希望对你有一定的参考价值。
参考技术A 在这里分享一下在python中上传数据到mysql的整体流程。利用for循环,可以依次把列表中的每一组数据写入sql语句并执行。
需要注意的是values的每个值都需要用引号引起来,否则会报错
Python保存到mysql数据库
【中文标题】Python保存到mysql数据库【英文标题】:Python save to mysql database 【发布时间】:2016-08-01 10:53:19 【问题描述】:我当前的脚本保存到一个 excel 文件,但我想直接将它上传到我的 mysql 数据库。
for i in range(0, len(names)):
ws.append([names[i], str((float(sells[i])+float(buys[i]))/2.0)])
except:
print('Cannot fetch from this link')
print('Saving the file with name markets.xlsx')
wb.save("markets.xlsx")
我将如何执行循环来执行以下操作
sql = "INSERT INTO todaysmarkets(Name,value) VALUES(%s,%s)"
****更新*****
按照这里的建议,我现在有以下几点:
cnx = mysql.connector.connect(host='.com', user='', password='', database='')
cursor = cnx.cursor()
for i in range(0, len(names)):
cursor.execute(("INSERT INTO todaysmarkets(Name,value) VALUES(%s,%s)"), (names[i], str((float(sells[i])+float(buys[i]))/2.0)))
cnx.close()
脚本运行没有错误,但数据库没有更新。
【问题讨论】:
所以你不使用任何类型的ORM?您是否看到有关如何从 Python 连接到它的 mysql 文档? dev.mysql.com/doc/connector-python/en/… 您能否用您当前的示例和错误堆栈更新您的问题? 好的,您能否确认您可以在未选择用户/密码/数据库的情况下使用控制台命令mysql
连接到您的数据库?我猜你首先需要这些设置(使用mysql
控制台命令,连接到mysql,创建数据库,使用密码创建用户并授予用户连接到127.0.0.1
或localhost
的权限)。您还需要使用列Name
和value
创建的表todaymarkets
。然后您需要更新连接字符串 (`mysql.connector.connect(host='127.0.0.1', user='your_user', password='your_password', database='your_database')
【参考方案1】:
在我去向您指出资源之前,我将提及您可能已经知道的一些事情 - 构建 SQL 查询(例如您的示例中的那个)会导致高潜力的人可能会提供不需要的字符串,并因此执行某种 sql 注入.当然,如果您正在构建一个工具,那么您是唯一将要使用的工具,这可能不是真的。我不是经常使用 mysql 的用户,也不直接与 sql 交互,所以我也不确定 mysql 是否会为您完成所有转义以防止潜在的 SQL 注入。在 PHP 世界中 mysqli 会这样做(据我所知)。
在 Python 下开发时,MySQL 提供了一个良好的开端。
https://dev.mysql.com/doc/connector-python/en/connector-python-example-connecting.html
我发现安装 mysql 连接器并不简单 - 在这里找到帮助:I cannot install mysql-connector-python using pip
示例 Python 代码(通过简单地从提供的资源复制/粘贴组合而成)如下所示:
import mysql.connector
cnx = mysql.connector.connect(user='scott', password='tiger',
host='127.0.0.1',
database='employees')
cursor = cnx.cursor()
for i in range(0, len(names)):
cursor.execute(("INSERT INTO todaysmarkets(Name,value) VALUES(%s,%s)"), (names[i], str((float(sells[i])+float(buys[i]))/2.0)))
cnx.close()
当然,此示例“假定”您将创建 employees
数据库并在运行脚本之前授予 scott
使用密码 tiger
从 127.0.0.1
访问此数据库的权限。
如果您决定使用 ORM(即 SQLAlchemy),您的查询看起来会更容易阅读,并且使用 Alembic 等其他工具,如果您将来需要,您可以自动迁移您的架构(同样,这将是一个矫枉过正如果您正在为自己的工具进行开发)
【讨论】:
我编辑了脚本并将其添加到我现有的脚本中,但收到错误“AttributeError: Unsupported argument 'cursorclass'”(这也是我自己的工具) 如果您尝试将您的INSERT INTO todaysmarkets(Name,value) VALUES(%s,%s)
更改为:INSERT INTO todaysmarkets(Name,value) VALUES(%(name)s,%(value)s)
和这样的数据:'name':names[i], 'value':str((float(sells[i])+float(buys[i]))/2.0))
。你也可以发布你编辑的样本吗?
我做了以下事情:cnx = mysql.connector.connect(host='.com', user='', password='', database='') cursor = cnx.cursor() for i in range(0, len(names)): cursor.execute(("INSERT INTO todaysmarkets(Name,value) VALUES(%s,%s)"), (names[i], str((float(sells[i])+float(buys[i]))/2.0))) cnx.close()
但它没有向数据库中添加任何内容【参考方案2】:
首先,您应该有一些库来为您完成繁重的工作。你应该试试官方mysql.connector
。
使用起来很简单。
connection = mysql.connector.connect(
host=MYSQL_SERVER_ADDRESS,
port=MYSQL_SERVER_PORT,
user=MYSQL_SERVER_USER,
password=MYSQL_SERVER_PASS,
database=MYSQL_SERVER_DB
)
cursor = connection.cursor()
cursor.execute(SQL_STATEMENT)
或者如果你想使用多个参数,你应该使用executemany
cursor.executemany(operation, seq_of_params)
在你的情况下是:
cursor.executemany(sql, ws) # sql is the string you posted, and ws is the data
【讨论】:
【参考方案3】:您需要实施以下更改:
-
不要在循环中调用
cnx.close()
根据Inserting into MySQL table in Python,您需要调用cnx.commit()
来保持更改:
重要提示!:注意语句:mydb.commit()。必须进行更改,否则不会对表格进行任何更改。
【讨论】:
以上是关于python上传数据到MySQL数据库的主要内容,如果未能解决你的问题,请参考以下文章
通过 python 将 csv 文件插入 MySQL。运行但数据未填充到表中