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.1localhost 的权限)。您还需要使用列Namevalue 创建的表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 使用密码 tiger127.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。运行但数据未填充到表中

使用python将数据插入mysql表

Python 导出本机mysql数据库,打包并上传至ftp服务器

用Python向MySQL数据库插入数据

从mdb文件导入数据到mysql数据库无法上传数据

从入门到自闭之Python--MySQL数据库的单表操作