Advertisement

Python数据库查询结果为列表或元组的实例

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本文介绍了如何使用Python进行数据库查询,并展示了将查询结果存储为列表或元组的具体示例。通过这些例子,读者可以轻松掌握数据处理技巧。 在Python进行数据库查询时通常会使用一些连接库如MySQLdb(适用于MySQL)或pymysql。这些库提供了与数据库交互的方法,包括执行SQL语句、获取查询结果等。 默认情况下,MySQLdb库返回的查询结果是一个包含多个tuple的list,每个tuple代表一行记录,并且tuple中的元素对应于查询结果中的列值。例如,如果你有一个用户表`user`,它有两个字段:`num`和`age`, 查询所有记录可能会得到如下格式的结果: ```python [(1000L, 0L), (2000L, 0L), (3000L, 0L)] ``` 这种返回方式要求通过索引访问数据,如 `result[0][1]` 来获取第一行的第二列值。 为了使查询结果更易于处理,可以将游标设置为字典类型(DictCursor)。这使得查询结果以键-值对形式呈现出来。修改后的代码如下: ```python import MySQLdb from MySQLdb.cursors import DictCursor # 连接数据库并创建一个使用字典类型的游标的连接对象。 db = MySQLdb.connect(host=localhost, user=root, passwd=123456, db=test, cursorclass=DictCursor) cur = db.cursor() cur.execute(SELECT * FROM user) rs = cur.fetchall() # 现在可以通过列名直接访问数据,如 rs[0][age]。 print(rs) # 输出类似 { num: 1000L, age: 0L }, { num: 2000L, age: 0L }等字典形式的数据 ``` 对于pymysql来说使用方法相似: ```python import pymysql db = pymysql.connect(localhost, root, 123456, test) cursor = db.cursor(pymysql.cursors.DictCursor) # 查询并获取所有结果。 sql = SELECT * FROM tablelist WHERE id>%s cursor.execute(sql, [4]) result = cursor.fetchall() print(result) ``` 在上面的pymysql示例中,我们使用了DictCursor来使查询返回字典形式的结果。此外还展示了如何执行参数化查询,并且展示了一种遍历tuple类型的查询结果的方法: ```python # 对((6, engineeringdata20180901, 1535731200),)类型数据的提取。 for i in range(len(result)): id_list.append(result[i][0]) tablename_list.append(result[i][1]) tabletime_lsit.append(result[i][2]) print(id_list) print(tabletime_lsit) ``` 通过这种方式,你可以更方便地处理和操作查询结果。特别是在列名较多或含义清晰时使用字典形式的数据会更加直观和高效。在实际应用中可以根据需求选择合适的方式存储和处理数据库的查询结果。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • Python
    优质
    本文介绍了如何使用Python进行数据库查询,并展示了将查询结果存储为列表或元组的具体示例。通过这些例子,读者可以轻松掌握数据处理技巧。 在Python进行数据库查询时通常会使用一些连接库如MySQLdb(适用于MySQL)或pymysql。这些库提供了与数据库交互的方法,包括执行SQL语句、获取查询结果等。 默认情况下,MySQLdb库返回的查询结果是一个包含多个tuple的list,每个tuple代表一行记录,并且tuple中的元素对应于查询结果中的列值。例如,如果你有一个用户表`user`,它有两个字段:`num`和`age`, 查询所有记录可能会得到如下格式的结果: ```python [(1000L, 0L), (2000L, 0L), (3000L, 0L)] ``` 这种返回方式要求通过索引访问数据,如 `result[0][1]` 来获取第一行的第二列值。 为了使查询结果更易于处理,可以将游标设置为字典类型(DictCursor)。这使得查询结果以键-值对形式呈现出来。修改后的代码如下: ```python import MySQLdb from MySQLdb.cursors import DictCursor # 连接数据库并创建一个使用字典类型的游标的连接对象。 db = MySQLdb.connect(host=localhost, user=root, passwd=123456, db=test, cursorclass=DictCursor) cur = db.cursor() cur.execute(SELECT * FROM user) rs = cur.fetchall() # 现在可以通过列名直接访问数据,如 rs[0][age]。 print(rs) # 输出类似 { num: 1000L, age: 0L }, { num: 2000L, age: 0L }等字典形式的数据 ``` 对于pymysql来说使用方法相似: ```python import pymysql db = pymysql.connect(localhost, root, 123456, test) cursor = db.cursor(pymysql.cursors.DictCursor) # 查询并获取所有结果。 sql = SELECT * FROM tablelist WHERE id>%s cursor.execute(sql, [4]) result = cursor.fetchall() print(result) ``` 在上面的pymysql示例中,我们使用了DictCursor来使查询返回字典形式的结果。此外还展示了如何执行参数化查询,并且展示了一种遍历tuple类型的查询结果的方法: ```python # 对((6, engineeringdata20180901, 1535731200),)类型数据的提取。 for i in range(len(result)): id_list.append(result[i][0]) tablename_list.append(result[i][1]) tabletime_lsit.append(result[i][2]) print(id_list) print(tabletime_lsit) ``` 通过这种方式,你可以更方便地处理和操作查询结果。特别是在列名较多或含义清晰时使用字典形式的数据会更加直观和高效。在实际应用中可以根据需求选择合适的方式存储和处理数据库的查询结果。
  • Python pymysql连接并将转换Dataframe
    优质
    本教程展示了如何使用Python的pymysql库连接MySQL数据库,并将执行SQL查询的结果转化为Pandas Dataframe格式。适合初学者学习。 直接看代码吧! ```python import pymysql import pandas as pd def con_sql(db, sql): # 创建连接 db = pymysql.connect(host=127.0.0.1, port=3308, user=name, passwd=password, db=db, charset=utf8) # 创建游标 cursor = db.cursor() cursor.execute(sql) result = cursor.fetchall() # 执行结果转化为dataframe df = pd.DataFrame(result) ```
  • 态王工程.zip
    优质
    本资源为《组态王数据库查询实例总结工程》压缩包,内含一系列使用King View(组态王)软件进行数据库查询的实际工程项目文件与代码示例。适合工控系统开发人员参考学习。 组态王查询数据库查询实例总结工程.zip
  • 优质
    本文档对单表数据库查询进行了全面总结,涵盖了基础到高级的各种查询技巧和SQL语句,旨在帮助读者提升数据库操作效率。 总结数据库单表查询的内容,并将其他数据库相关总结分开上传。
  • 在SparkMR引擎中插入,在Hive0
    优质
    当在Apache Spark或MapReduce引擎中处理并存储数据至Hive表后遇到查询结果显示为空的情况时,本文将提供排查此类问题的方法和建议。 ### Spark或MR引擎插入的数据在Hive表查询为0的问题解析 #### 问题背景与现象 大数据处理场景下,经常使用不同的执行引擎(如Spark、MapReduce (MR) 或 Tez)进行数据操作。常见的问题是:当通过Spark或MR引擎向Hive表中写入数据后,用Hive查询这些表时发现没有返回任何记录。具体表现为用户报告在Tez引擎环境下可以正常获取到正确结果,但在使用Spark-SQL查询同一张表时却无法读取到任何数据。 #### 原因分析 该问题的根本原因在于执行写入操作的引擎(如Tez)在处理`UNION ALL`指令时会在原始分区目录下生成一个额外子目录,例如`HIVE_UNION_SUBDIR_1`(或类似的命名)。当使用这种机制进行数据合并后,并没有直接将结果存储到对应的主分区中,而是放在了这个新创建的子目录内。如果查询使用的引擎未正确配置处理这种情况,则会导致无法读取实际写入的数据。 #### 解决方案 为解决上述问题,可以从调整数据插入方式和优化查询时的设置两个方面入手: ##### 方案一:改变数据写入策略 1. **更换执行引擎**:最直接的方法是避免使用Tez进行`UNION ALL`操作。可以改用Hive或Spark-SQL作为主要的数据写入工具,这样能确保数据直接存储在指定的分区目录中。 2. **利用二次处理方法**: - 在通过Tez完成合并后,可以通过表插入的方式将分散于子目录中的数据重新组织到主分区文件夹内。 - 另一种选择是在执行`UNION ALL`操作时添加`DISTRIBUTE BY`指令来强制启动一次Reduce过程,这有助于整理和优化数据分布。 ##### 方案二:调整查询引擎配置 1. **MapReduce(MR)的设置**: 设置以下参数以支持子目录读取: ``` set hive.mapred.supports.subdirectories=true; set mapred.input.dir.recursive=true; ``` 2. **Spark-SQL的设置**: 同样需要如下配置来确保数据被正确识别和读取: ``` --conf spark.sql.hive.convertMetastoreOrc=false --conf spark.hadoop.mapred.input.dir.recursive=true ``` #### 结论 通过对上述分析可以了解到,当使用Spark或MR引擎插入的数据在Hive表查询时显示为0条记录的问题主要是由于Tez执行`UNION ALL`操作后产生的子目录问题。通过改变数据写入策略或者优化查询配置都可以有效地解决此问题,在实际应用中可以根据具体情况选择最合适的解决方案以确保数据的准确读取和处理。
  • Java中展示
    优质
    本教程介绍如何在Java应用程序中高效地执行数据库查询,并将查询结果显示给用户。通过实例讲解,帮助开发者掌握连接数据库、编写SQL语句及处理结果集的方法。 在利用Java开发数据库应用的过程中,常常需要将查询结果展示给用户。为实现这一目标,可以采用Vector、JTable及AbstractTableModel这三个类。 首先解释一下这些类的功能: 1. **Vector 类**: 这是一个存储数据的容器类型,在这里定义如下:`public class Vector extends AbstractList implements List, Cloneable, Serializable{...}` 2. **JTable 类** JTable 是 Swing 包中的一个组件,用于在用户界面中以二维表格的形式展示数据。它的定义为:`public class JTable extends JComponentimplements TableModelListener, Scrollable, TableColumnModelListener, ListSelectionListener, CellEditorListener, Accessible{...}` 3. **AbstractTableModel 类** 这个类是所有表模型的基类,它需要实现以下三个方法: - `public int getRowCount();` - `public int getColumnCount();` - `public Object getValueAt(int row, int column);` 为了展示一个简单的5x5表格实例: ```java TableModel dataModel = new AbstractTableModel() { public int getColumnCount() { return 5; } public int getRowCount() { return 5;} public Object getValueAt(int row, int col) { return new Integer(row*col); } }; JTable table = new JTable(dataModel); JScrollPane scrollpane = new JScrollPane(table); ``` 对于数据库操作,我们使用 Sybase 数据库。这个数据库位于 D:WORKER 文件夹中,并且名为 worker.dbf。此表包含以下字段: - Wno(职工号):VARCHAR - Wname(职工名):VARCHAR - Sex(性别):VARCHAR - Birthday(出生日期):DATE - Wage(工资):FLOAT 为了连接数据库,我们使用了 `java.sql` 包中的 `DriverManager` 类。以下为连接步骤: 1. 加载 Sybase JDBC 驱动程序。 2. 使用驱动管理器注册该驱动。 3. 通过 URL、用户名和密码获取到数据库的连接。 完成这些后就可以利用 Statement 接口进行数据查询或更新操作了。 在实际应用中,我们定义如下对象: - `AbstractTableModel tm;` - `JTable jg_table;` - `Vector vect;` - `JScrollPane jsp;` 并根据需要定制表格。例如设置列名、行数和单元格值等方法,并将数据模型绑定到 JTable 上。 最后,连接数据库后执行 SQL 查询以获取查询结果: ```java Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(select * from worker); // 将查询的数据放入向量中然后更新表格显示。 ``` 为了实现记录的前后翻页功能,可以使用 `rs.previous()` 和 `rs.next()` 方法(如果支持 JDBC2.0),或者通过 Vector 按行读取 JTable 数据并改变指针位置来完成。
  • 将SQL存储至
    优质
    本教程介绍如何将SQL查询的结果保存到数据库表中,涵盖创建新表、使用INSERT语句及SELECT INTO等方法,帮助用户高效管理查询数据。 SQL查询, SQL Server, 数据库导入导出,将查询结果插入表中。
  • 中多与嵌套(含子演示
    优质
    本教程通过具体示例讲解数据库中的多表查询和嵌套查询技巧,包括如何使用子查询来实现复杂的数据检索操作。 以下是简化后的数据库查询示例: 1. 使用FROM子句进行多表连接查询: ```sql SELECT kjbdsjk.编号, kjbdsjk.姓名, kjbdsjk.职业, duobiao.收入 FROM kjbdsjk, duobiao WHERE kjbdsjk.编号 = duobiao.编号 AND duobiao.收入 > 3000; ``` 2. 使用UNION运算符合并多个结果集: ```sql SELECT 编号, 姓名, 年龄 FROM kjbdsjk UNION SELECT 编号, 姓名, 年龄 FROM shuzcx; ``` 3. 简单的嵌套查询: ```sql SELECT * FROM kjbdsjk WHERE 姓名 IN (SELECT 姓名 FROM duobiao WHERE 奖金 >= 1000); ``` 4. 复杂的嵌套查询: ```sql SELECT * FROM duobiao WHERE YEAR(日期) = 2006 AND MONTH(日期) = 5 AND 姓名 IN (SELECT 负责人 FROM bumenbiao WHERE 负责人在kjbdsjk中姓名的年龄>20) ORDER BY 编号; ``` 5. 使用子查询作为派生表: ```sql SELECT 年龄, COUNT(*) AS 相同年龄 FROM (SELECT TOP 10 年龄 FROM kjbdsjk ORDER BY 编号) t GROUP BY 年龄; ``` 6. 在表达式中使用子查询: ```sql SELECT 职业, AVG(年龄) AS 平均年龄 FROM (SELECT 职业, AVG(年龄) AS 平均年龄 FROM kjbdsjk GROUP BY 职业) t WHERE 平均年龄 > 20; ``` 7. 在UPDATE语句中使用子查询: ```sql UPDATE kjbdsjk SET 工资 = 工资 + 1000 WHERE 工资 IN (SELECT 工资 FROM kjbdsjk WHERE 工资 > +stredit+); ``` 以上SQL语句展示了如何执行数据库中的复杂查询操作,包括连接不同表、合并结果集以及使用子查询来优化数据处理。
  • 06-3--合并与去重复
    优质
    本教程讲解如何在数据库中执行复杂查询操作,重点介绍数据合并及去除重复记录的方法,帮助用户掌握高效的数据处理技巧。 在进行数据库查询后,需要对结果进行合并并去重处理。
  • SQL中自动编号
    优质
    本文介绍了一种在SQL查询中自动生成行号的方法,帮助用户更方便地对数据库查询的结果进行排序和标识。 ACCESS和SQL Server的数据库查询结果自动编号可以通过编写特定的SQL语句来实现。在ACCESS中可以使用自定义函数配合查询生成序号,在SQL Server中则可以直接利用变量或窗口函数进行行号生成。这些方法能够有效地为查询结果添加一个有序的序列,便于数据处理与展示。