从Python介绍SQL的基础(一)

在之前的使用django和Echarts展示游戏币曲线图中,使用了django的数据库映射来处理数据库和web应用的交互。这篇文章给大家介绍一些原生的python SQL知识。

大部分人现在可能都会在使用开源的数据库比如postgreSQL或者MySQL或者MariaDB。

关系数据库是基于是B/S架构的系统。在PostgreSQL 中,服务器执行与数据本身的所有实际交互;而客户机则是向服务器发出请求并读取或修改数据库的程序。这种方式允许多个客户机同时访问数据,而服务器则执行所有必要的同步。

通过postmaster使用psql

请先确保服务器(postmaster)正在运行中……如果在多用户系统上,系统管理员可能负责此工作,并创建了一个数据库供您使用,或者与他人共享。本文只在独立的Linux上使用,所以我将以本地模式启动postgres并创建一个测试数据库。我们将使用一个专用窗口来运行postmaster:

$ postmaster -i localhost

然后,作为客户登录到另一个窗口中,创建一个名为school的新数据库。然后我将激活附加到我的数据库school的psql客户机。现在就可以在school中添加和操作表了。当程序显示school=#,显示它打开了哪个数据库。

$ createdb school
$ psql school
school=#

表的操作

所谓的表是由一个名称和一组列的数据集。每个列依次需要名称和数据类型。这里有一个简单的例子:

school=# create table kecheng (number int, name varchar(50), score int);

在这里,我们创建了一个包含课程信息的表。我们用一列表示课程编号,另一列表示课程名称,还有一列表示学分。该名称被定义为varchar(可变长度字符串),它类似于Python字符串,只是这个字符串的最大长度为50。课程编号和学分为整数。
create table的相反操作是drop table。您可能认为drop是“删除”,如果您是unix用户,则认为是“rm”。

表创建完毕之后我们就可以进行CRUD的操作了!

插入数据

插入数据有两种方式。第一种是按照创建时定义的列的顺序列出列值。例如:

school=# insert into kecheng values (1, 'yuwen', 10);

另一种方法是列出列名:

school=# insert into student (id,name) values (2, 'shuxue');

如果某些列具有默认值或可以接受空值(在Python中就是None),那么此方法将非常方便。这些列及其值可以从insert语句中省略。大家可以去了解下如何指定默认值。

删除数据

从表中删除行非常简单:

school=# delete from kecheng where number=250

通过number=250指定其中一行,如果发现有相同的内容则执行删除操作。并且如果表中有两行包含这个数字,那么这两行都将被删除。如果没有where子句,表中的所有行都被删除。因此,这样写会有很大的风险。
where子句有点像Python中的布尔表达式,比如if和while这样的关键字。但是有一些区别你需要记住,在SQL中,必须使用一个=来测试等式,而不是==。其中and和or是和python一样的,允许的你可以像你想象的那样使用。在postgreSQL中需要注意的一点是,字符串必须使用单引号。双引号用于其他目的。
还有需要牢记的点是是模式匹配字符串数据。精确匹配是简单的name=’数学’,但是像’数%’这样的短语名称将匹配以数开头的任何字符串。%字符是SQL like操作符的通配符。在Python中,这类匹配通常需要正则表达式来完成。
Where子句可能是SQL中最复杂和最强大的部分。它们与update和select语句一起使用,就像与delete一样。我们在后面会看到几个例子。

更新数据

更新表中的列同样很简单。通过where子句找到要更新的行(或多行)。然后使用set子句标识列及其新值。

school=# update student set name='lilei' where id=1;

可以根据where子句修改单个列、几个列甚至所有列。还可以在单个update语句中更新多个列。只需将“name=value”和逗号分开就可以了。

选择数据

选择数据使用select语句,它因该是最最常用的了,从下面的一个例子说明下:

school=# select * from kecheng;
 number |       name       | credits
--------+------------------+---------
    1   | shuxue           |    5
    2   | yuwen            |    5
    3   | yingyu           |    5
    4   | wuli             |    4
    5   | huaxue           |    4
(5 rows)

通过where可以让筛选的数据更加精确:

school=# select * from course where name like 'y%';
 number |    name    | credits
--------+------------+---------
    2   | yuwen      |    5
    3   | yingyu     |    5
(2 rows)

另外还有个知识点:
“*”表示所有列。如果你不需要选出所有列,就按名称指定它们。

 

好了今天就先到这里,明天再给大家介绍进阶一点的SQL知识!

版权所属,如需转载,请注明出处:搜闲鱼

713 次浏览

发表评论

电子邮件地址不会被公开。 必填项已用*标注