您可以使用该select()
方法从数据库中的表中查询和返回记录。X DevAPI 提供了额外的方法来与方法一起使用
select()
来过滤和排序返回的记录。
MySQL 提供了以下运算符来指定搜索条件:OR
( ||
),
AND
( &&
),
XOR
, IS
,
NOT
, BETWEEN
,
IN
, LIKE
,
!=
, <>
,
>
, >=
,
<
, <=
,
&
, |
,
<<
, >>
,
+
, -
,
*
, /
,
~
和%
。
要发出从现有表返回所有记录的查询,请使用select()
不指定搜索条件的方法。以下示例从
world_x
数据库中的 city 表中选择所有记录。
将 emptyselect()
方法的使用限制在交互式语句中。始终在您的应用程序代码中使用明确的列名选择。
mysql-py> db.city.select()
+------+------------+-------------+------------+-------------------------+
| ID | Name | CountryCode | District | Info |
+------+------------+-------------+------------+-------------------------+
| 1 | Kabul | AFG | Kabol |{"Population": 1780000} |
| 2 | Qandahar | AFG | Qandahar |{"Population": 237500} |
| 3 | Herat | AFG | Herat |{"Population": 186800} |
... ... ... ... ...
| 4079 | Rafah | PSE | Rafah |{"Population": 92020} |
+------+------- ----+-------------+------------+-------------------------+
4082 rows in set (0.01 sec)
空集(无匹配记录)返回以下信息:
空集(0.00 秒)
要发出返回一组表列的查询,请使用该
select()
方法并在方括号之间指定要返回的列。此查询返回城市表中的 Name 和 CountryCode 列。
mysql-py> db.city.select(["Name", "CountryCode"])
+-------------------+-------------+
| Name | CountryCode |
+-------------------+-------------+
| Kabul | AFG |
| Qandahar | AFG |
| Herat | AFG |
| Mazar-e-Sharif | AFG |
| Amsterdam | NLD |
... ...
| Rafah | PSE |
| Olympia | USA |
| Little Falls | USA |
| Happy Valley | USA |
+-------------------+-------------+
4082 rows in set (0.00 sec)
要发出返回匹配特定搜索条件的行的查询,请使用该where()
方法来包含这些条件。例如,以下示例返回以字母 Z 开头的城市的名称和国家/地区代码。
mysql-py> db.city.select(["Name", "CountryCode"]).where("Name like 'Z%'")
+-------------------+-------------+
| Name | CountryCode |
+-------------------+-------------+
| Zaanstad | NLD |
| Zoetermeer | NLD |
| Zwolle | NLD |
| Zenica | BIH |
| Zagazig | EGY |
| Zaragoza | ESP |
| Zamboanga | PHL |
| Zahedan | IRN |
| Zanjan | IRN |
| Zabol | IRN |
| Zama | JPN |
| Zhezqazghan | KAZ |
| Zhengzhou | CHN |
... ...
| Zeleznogorsk | RUS |
+-------------------+-------------+
59 rows in set (0.00 sec)
您可以使用 方法将值与搜索条件分开bind()
。例如,不使用“Name = 'Z%'”作为条件,而是替换为一个命名占位符,该占位符由一个冒号后跟一个以字母开头的名称组成,例如name。然后在
bind()
方法中包含占位符和值,如下所示:
mysql-py> db.city.select(["Name", "CountryCode"]).where(
"Name like :name").bind("name", "Z%")
在程序中,绑定使您能够在表达式中指定占位符,这些占位符在执行前用值填充,并且可以根据需要从自动转义中获益。
始终使用绑定来清理输入。避免在使用字符串连接的查询中引入值,这会产生无效输入,并且在某些情况下会导致安全问题。
要使用运算符发出查询AND
,请在方法中的搜索条件之间添加运算符
where()
。
mysql-py> db.city.select(["Name", "CountryCode"]).where(
"Name like 'Z%' and CountryCode = 'CHN'")
+----------------+-------------+
| Name | CountryCode |
+----------------+-------------+
| Zhengzhou | CHN |
| Zibo | CHN |
| Zhangjiakou | CHN |
| Zhuzhou | CHN |
| Zhangjiang | CHN |
| Zigong | CHN |
| Zaozhuang | CHN |
... ...
| Zhangjiagang | CHN |
+----------------+-------------+
22 rows in set (0.01 sec)
要指定多个条件运算符,您可以将搜索条件括在括号中以更改运算符优先级。以下示例演示了AND
and
OR
运算符的放置。
mysql-py> db.city.select(["Name", "CountryCode"]).where(
"Name like 'Z%' and (CountryCode = 'CHN' or CountryCode = 'RUS')")
+-------------------+-------------+
| Name | CountryCode |
+-------------------+-------------+
| Zhengzhou | CHN |
| Zibo | CHN |
| Zhangjiakou | CHN |
| Zhuzhou | CHN |
... ...
| Zeleznogorsk | RUS |
+-------------------+-------------+
29 rows in set (0.01 sec)
您可以应用limit()
、
order_by()
和offset()
方法来管理该select()
方法返回的记录的数量和顺序。
要指定结果集中包含的记录数,请将limit()
带有值的方法附加到select()
方法。例如,以下查询返回国家表中的前五个记录。
mysql-py> db.country.select(["Code", "Name"]).limit(5)
+------+-------------+
| Code | Name |
+------+-------------+
| ABW | Aruba |
| AFG | Afghanistan |
| AGO | Angola |
| AIA | Anguilla |
| ALB | Albania |
+------+-------------+
5 rows in set (0.00 sec)
要指定结果的顺序,请将方法附加
order_by()
到
select()
方法。将一个或多个列的列表传递给该
order_by()
方法以进行排序,并且可以根据需要传递降序 ( desc
) 或升序 ( asc
) 属性。升序是默认的订单类型。
例如,以下查询按 Name 列对所有记录进行排序,然后按降序返回前三个记录。
mysql-py> db.country.select(["Code", "Name"]).order_by(["Name desc"]).limit(3)
+------+------------+
| Code | Name |
+------+------------+
| ZWE | Zimbabwe |
| ZMB | Zambia |
| YUG | Yugoslavia |
+------+------------+
3 rows in set (0.00 sec)
默认情况下,该limit()
方法从表中的第一条记录开始。您可以使用该
offset()
方法更改起始记录。例如,要忽略第一条记录并返回符合条件的下三条记录,请将
offset()
值 1 传递给该方法。
mysql-py> db.country.select(["Code", "Name"]).order_by(["Name desc"]).limit(3).offset(1)
+------+------------+
| Code | Name |
+------+------------+
| ZMB | Zambia |
| YUG | Yugoslavia |
| YEM | Yemen |
+------+------------+
3 rows in set (0.00 sec)
MySQL 参考手册提供了有关函数和运算符的详细文档 。
有关完整语法定义,请参阅TableSelectFunction。