),
location point
类型point就是一种PostgreSQL特有数据类型的例子。
删除一张表:
drop table tablename; -- 删除数据表
重命名一个表:
alter table [表名A] rename to [表名B];
查看表结构
\d tblname
insert语句用于向表中添加行:
INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
需要注意的是:那些不是简单数字的值,通常使用单引号包裹,date类型实际上对可接收的格式相当灵活,不过我们应该坚持使用这种清晰的格式。
point类型要求一个座标对作为输入,如下:
INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');
另一种方式是列出所有的列,一个可选的语法允许你明确地列出列:
INSERT INTO weather (city, temp_lo, temp_hi, prcp, date) VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');
你可以用另外一个顺序列出列或者是忽略某些列, 比如说,我们不知道降水量:
INSERT INTO weather (date, city, temp_hi, temp_lo) VALUES ('1994-11-29', 'Hayward', 54, 37);
你还可以使用COPY从文本文件中装载大量数据。这种方式通常更快,因为COPY命令就是为这类应用优化的, 只是比 INSERT少一些灵活性。比如:
COPY weather FROM '/home/user/weather.txt';
删除表中某行数据:
delete from [表名] where [该行特征];
delete from [表名];--删空整个表
删除表中的字段:
alter table [表名] drop column [字段名];
去除缺省值:
alter table [表名] alter column [字段名] drop default;
修改表中的某行某列的数据
update [表名] set [目标字段名]=[目标值] where [该行特征];
在已有的表里添加字段:
alter table [表名] add column [字段名] [类型];
给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];
重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];
首先,指定要在select子句中查询数据表的列,多个列使用逗号分隔,如果要查询所有列,使用星号(*)作为简写;其次,在From之后指出表名。 使用星号(*)不是一个好习惯:
-- 在SELECT语句中使用星号(*)不是一个好习惯 。想象一下,你有一个包含许多列的大表,SELECT带有星号(*)的语句将从整列中检索所有数据,这可能不是必需的。
此外,从表中检索不必要的数据会增加数据库服务器和应用程序之间的流量。
因此,您的应用程序将变得缓慢且可扩展性降低。
因此,最好在SELECT子句中明确指定列名,以便只从表中获取所需的数据。
LIMIT:PostgreSQL 中limit是select语句可选的子句,它获取查询返回的所有行的子集。
LIMIT语法:
SELECT * FROM table_name LIMIT n;
如果要在返回行之前跳过m行,请使用offset子句:
SELECT *FROM table LIMIT n OFFSET m;
由于数据库表行的顺序是不可预测的,因此在使用limit子句的时候,应始终使用该order by子句来控制行的顺序。
我们经常使用LIMIT子句来获取表中最高或最低项的数据,例如,要获得最贵的前十名电影,您可以按照售价按降序排序,并使用LIMIT条款获得前10部电影:
select * from film order by rental_rate desc limit 10;
ORDER BY:如何对查询返回的结果集进行排序
当你从表中查询数据,PostgreSQL按照他们插入的顺序返回行,需要对结果集进行排序,需要使用select的order by子句
select column_1,column_2 from table_name order by column_1 ASC,column_2 DESC;
首先,在order by子句中指定要排序的列,如果基于多个列对结果集进行排序,使用逗号分隔。
使用ASC表示升序,DESC按照降序,如果省略,默认按照ASC。
DISTINCT:删除结果集中重复行的子句
使用distinct语句可以从结果集中删除重复的行,该distinct子句为每组重复项保留一行
select distinct column_1 from table_name; -- column_1列中的值用于评估重复项
select distinct column_1,column_2 from table_name; -- column_1列和column_2两者的结合用于评估重复项
Pgsql常用命令:
连接数据库, 默认的用户和数据库是postgres
psql -U user -d dbname
切换数据库,相当于mysql的use dbname
\c dbname
列举数据库,相当于mysql的show databases
列举表,相当于mysql的show tables
查看表结构,相当于desc tblname,show columns from tbname
\d tblname
\di 查看索引
创建数据库:
create database [数据库名];
删除数据库:
drop database [数据库名];
*重命名一个表:
alter table [表名A] rename to [表名B];
*删除一个表:
drop table [表名];
*在已有的表里添加字段:
alter table [表名] add column [字段名] [类型];
*删除表中的字段:
alter table [表名] drop column [字段名];
*重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];
*给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];
*去除缺省值:
alter table [表名] alter column [字段名] drop default;
在表中插入数据:
insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);
修改表中的某行某列的数据:
update [表名] set [目标字段名]=[目标值] where [该行特征];
删除表中某行数据:
delete from [表名] where [该行特征];
delete from [表名];--删空整个表
create table ([字段名1] [类型1] <references 关联表名(关联的字段名)>;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;);
\copyright 显示 PostgreSQL 的使用和发行条款
\encoding [字元编码名称]
显示或设定用户端字元编码
\h [名称] SQL 命令语法上的说明,用 * 显示全部命令
\prompt [文本] 名称
提示用户设定内部变数
\password [USERNAME]
securely change the password for a user
\q 退出 psql
可以使用pg_dump和pg_dumpall来完成。比如备份sales数据库:
pg_dump drupal>/opt/Postgresql/backup/1.bak
View Code
五、Psycopg简介
Psycopg是Python编程语言中最流行的PostgreSQL数据库适配器。它的主要功能是完整实现Python DB API 2.0规范和线程安全(多个线程可以共享相同的连接)。它专为大量多线程应用程序而设计,可以创建和销毁大量游标并创建大量并发“INSERT”或“UPDATE”。Psycopg 2主要在C中作为libpq包装器实现,从而既高效又安全。它具有客户端和服务器端游标,异步通信和通知,“复制到/复制”支持。许多Python类型都支持开箱即用,适用于匹配PostgreSQL数据类型; 通过灵活的物体适应系统,可以扩展和定制适应性。Psycopg 2兼容Unicode和Python 3。
六、PsyCopg的使用
使用Python3连接postgresql数据库
import psycopg2
#创建连接对象
conn=psycopg2.connect(database="postgres",user="postgres",password="123456",host="localhost",port="5432")
cur=conn.cursor() #创建指针对象
# 创建表
cur.execute("CREATE TABLE student(id integer,name varchar,sex varchar);")
#插入数据
cur.execute("INSERT INTO student(id,name,sex)VALUES(%s,%s,%s)",(1,'Aspirin','M'))
cur.execute("INSERT INTO student(id,name,sex)VALUES(%s,%s,%s)",(2,'Taxol','F'))
cur.execute("INSERT INTO student(id,name,sex)VALUES(%s,%s,%s)",(3,'Dixheral','M'))
# 获取结果
cur.execute('SELECT * FROM student')
results=cur.fetchall()
print (results)
# 关闭连接
conn.commit()
cur.close()
conn.close()