【问题标题】:How to read a csv using sql如何使用 sql 读取 csv
【发布时间】:2013-06-26 01:32:05
【问题描述】:

我想知道如何使用 sql 读取 csv 文件。我想使用 group by 并将其他 csv 文件连接在一起。我将如何在 python 中解决这个问题。

示例:

select * from csvfile.csv where name LIKE 'name%'

【问题讨论】:

  • sql? Python?它是哪一个?您手头的具体问题是什么?
  • 我想用sql查询一个csv文件。 select * from csvfile.csv where name LIKE 'name%'
  • SQL 用于查询数据库而不是文本文件。首先在您选择的数据库中创建您的模式/表,然后使用 python 加载您的数据库表中的 csv 值。最后,您使用 SQL 进行查询。
  • SQL 不能应用于 CSV 文件,理论上没有理由,事实上,有 SQL 引擎以 CSV 格式存储数据。然而,快速搜索并没有找到 Python。
  • 不确定为什么会被搁置。很清楚要问什么——如何使用 SQL 语句查询 csv 文件。仅使用 Python 无法做到这一点的事实仅表明 OP 的知识存在漏洞,而不是缺乏清晰度。

标签: python sql csv python-3.x


【解决方案1】:

SQL 代码由数据库引擎执行。 Python 不直接理解或执行 SQL 语句。

虽然一些 SQL 数据库将其数据存储在类似 csv 的文件中,但几乎所有 SQL 数据库都使用更复杂的文件结构。因此,您需要将每个 csv 文件导入 SQL 数据库引擎中的单独表中。然后,您可以使用 Python 连接到 SQL 引擎并向其发送 SQL 语句(例如 SELECT)。引擎将执行 SQL,从其数据文件中提取结果,并将它们返回给您的 Python 程序。

最常见的轻量级引擎是 SQLite。

【讨论】:

    【解决方案2】:

    littletable 是我编写的一个 Python 模块,用于处理对象列表,就好像它们是数据库表一样,但使用的是类似关系的 API,而不是实际的 SQL 选择语句。 littletable 中的表格可以轻松地从 CSV 文件中读取和写入。我特别喜欢的功能之一是来自 littletable Table 的每个查询都会返回一个新 Table,因此您不必学习 Table 与 RecordSet 的不同接口。表像列表一样可迭代,但也可以选择、索引、连接和旋转 - 请参阅 the opening page of the docs

    # print a particular customer name 
    # (unique indexes will return a single item; non-unique
    # indexes will return a Table of all matching items)
    print(customers.by.id["0030"].name)
    print(len(customers.by.zipcode["12345"]))
    
    # print all items sold by the pound
    for item in catalog.where(unitofmeas="LB"):
        print(item.sku, item.descr)
    
    # print all items that cost more than 10
    for item in catalog.where(lambda o : o.unitprice>10):
       print(item.sku, item.descr, item.unitprice)
    
    # join tables to create queryable wishlists collection
    wishlists = customers.join_on("id") + wishitems.join_on("custid") + catalog.join_on("sku")
    
    # print all wishlist items with price > 10
    bigticketitems = wishlists().where(lambda ob : ob.unitprice > 10)
    for item in bigticketitems:
       print(item)
    

    表的列是从添加到表中的对象的属性推断出来的。 namedtuples 也很好,还有 types.SimpleNamespaces。您可以将 dicts 插入到 Table 中,它们将被转换为 SimpleNamespaces。

    littletable 需要一点时间来适应,但听起来你已经在考虑类似的路线了。

    【讨论】:

      【解决方案3】:

      您可以使用 PHP 脚本轻松查询 SQL 数据库。 PHP 在服务器端运行,因此您的所有代码都必须位于网络服务器(带有数据库的服务器)上。您可以像这样创建一个连接到数据库的函数:

      $con= mysql_connect($hostname, $username, $password) 
        or die("An error has occured");
      

      然后使用$con 完成其他任务,例如循环数据和创建表,甚至向现有表添加行和列。

      编辑:我注意到你说 .CSV 文件。您可以将 CSV 文件上传到 SQL 数据库并从中创建一个表。如果您使用的是 phpMyAdmin 等控制面板服务,您只需将 CSV 文件导入数据库,如下所示:

      如果您正在寻找免费的网络主机来测试您的 SQL 和 PHP 文件,请查看x10 托管。

      【讨论】:

      • 这个问题是关于 Python,而不是 PHP。问题中没有任何迹象表明网络服务器以任何方式参与。用户没有运行数据库,而是运行 csv 文件。另外,我确信 PHP 提供了参数化查询,所以如果这是一个关于从用 PHP 编写的 Web 服务器查询 MySQL 的问题,那么关于 SQL 注入的部分是不正确的(假设您编码仔细)。此外,数据库服务器不需要与 Web 服务器一起驻留。
      猜你喜欢
      • 2020-09-21
      • 2018-03-25
      • 2021-01-02
      • 2022-11-01
      • 2017-07-06
      • 1970-01-01
      • 2018-09-07
      • 2020-04-30
      • 2010-12-08
      相关资源
      最近更新 更多