postgreSQL 操作 教程

  • 1. 建立数据库连接
  • 2. 访问数据库
    • 列出当前数据库所有表
    • 列出数据库名
    • 切换数据库
    • 查询数据库、表名
  • 内部命令
  • SQL命令通用如(标准化SQL语句):
    • 数据库
    • schema
      • 查看表
      • 操作表
      • 表删除
      • 表连接
      • 计算功能
      • VIEW 视图
      • Inheritance 继承
  • python连接

1. 建立数据库连接

psql -h IP地址 -p 端口 -U 数据库名
psql -h IP -U user_name -p 1035 user_db

2. 访问数据库

\? help

1、列举数据库:\l
2、选择数据库:\c 数据库名
3、查看该某个库中的所有表:\dt
4、切换数据库:\c interface
5、查看某个库中的某个表结构:\d 表名
6、查看某个库中某个表的记录:select * from apps limit 1;
7、显示字符集:\encoding
8、退出psgl:\q

列出当前数据库所有表

\dt
列出所有表名

SELECT tablename FROM pg_tables;
WHERE tablename NOT LIKE 'pg%'
AND tablename NOT LIKE 'sql_%'
ORDER BY tablename;

列出数据库名

\l

SELECT datname FROM pg_database;

切换数据库

\c 数据库名

查询数据库、表名

1、通过命令行查询
\d 数据库 —— 得到所有表的名字
\d 表名 —— 得到表结构
2、通过SQL语句查询
select * from pg_tables"—— 得到当前db中所有表的信息(这里pg_tables是系统视图)
select tablename from pg_tables where schemaname='public' —— 得到所有用户自定义表的名字(这里"tablename"字段是表的名字,"schemaname"是schema的名字。用户自定义的表,如果未经特殊处理,默认都是放在名为public的schema下)

内部命令

postgresql数据管理系统使用命令方式有两种:

  1. 内部命令,以反斜线开始 \ ,如: \l 显示所有数据库
  2. 标准SQL命令,以分号 ; 或 \g 结束,可以使用多行

数据库的关键操作:
启动服务
登录
建立数据库
建立表
插入记录到表中
更新/删除/查询/修改操作
退出
停止服务
设置字符集为 utf-8

在windows7中安装的postgresql默认使用GBK字符集,经常不能使用显示中文的数据表,解决办法:
注意:在windows 7下的postgresql中写操作时要使用GBK,读操作时要用UTF8;

postgres=# \encoding utf-8 // 设置客户端的字元集
postgres=# \encoding // 显示客户端的字元集
postgres=# show client_encoding; // 显示客户端的字元集
postgres=# show server_encoding; // 显示服务器的字元集

启动服务:
net start postgresql-9.5
停止服务:
net stop postgresql-9.5
获取命令帮助:
psql --help

您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面

\h 显示 SQL 命令的说明
\?显示 pgsql 命令的说明 (pgsql内部命令)
\g 或者以分号(;)结尾以执行查询
\q 退出注: 数据库名称区分大小写的。


postgres=# \help // 获取SQL命令的帮助,同 \h
postgres=# \quit // 退出,同 \q
postgres=# \password dlf // 重新设置用户dlf的密码,然后需要 \q退出后才生效
c:>psql exampledb < user.sql // 将user.sql文件导入到exampled数据库中
postgres=# \h select // 精细显示SQL命令中的select命令的使用方法
postgres=#\l // 显示所有数据库
postgres=# \dt // 显示当前数据库中的所有表
postgres=# \d [table_name] // 显示当前数据库的指定表的表结构
postgres=# \c [database_name] // 切换到指定数据库,相当于use
postgres=# \du // 显示所有用户
postgres=# \conninfo // 显示当前数据库和连接信息
postgres=# \e // 进入记事本sql脚本编辑状态(输入批命令后关闭将自动在命令行中执行)
postgres=# \di // 查看索引(要建立关联)
postgres=# \prompt [文本] 名称 // 提示用户设定内部变数
postgres=# \encoding [字元编码名称] // 显示或设定用户端字元编码*可以将存储过程写在文本文件中aaa.sql,然后在psql状态下:
postgres=# \i aaa.sql // 将aaa.sql导入(到当前数据库)
postgres=# \df // 查看所有存储过程(函数)
postgres=# \df+ name // 查看某一存储过程
postgres=# select version(); // 获取版本信息
postgres=# select usename from pg_user; // 获取系统用户信息
postgres=# drop User 用户名 // 删除用户

SQL命令通用如(标准化SQL语句):

数据库

--*创建数据库:
create database [数据库名];--*删除数据库:
drop database [数据库名];

schema

-- 选择 schema
set search_path to test_schema;-- 删除 schema
DROP schema test_2;--查看所有schema
SELECT * FROM information_schema.schemata;

查看表

--获取当前db中所有的表信息
select * from pg_tables;--用户自定义的表,如果未经特殊处理,默认都是放在名为public的schema下select tablename from pg_tables where schemaname='public';--列出某个数据库下的某个schema下面所有的表
select * from pg_tables where schemaname = 'test_schema';--*显示表内容:
select * from student;
--计算数值
SELECT city, (temp_lo+temp_hi)/2 AS temp_avg, date FROM weather;
--选择查看
SELECT * FROM weather WHERE city = 'San Francisco' AND prcp > 0.0;
--排序
SELECT * FROM weather ORDER BY city;
SELECT * FROM weather ORDER BY city, temp_lo;
--返回唯一值
SELECT DISTINCT city FROM weather ORDER BY city;

操作表

--*创建表:
-- create table ([字段名1] [类型1] ;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;);
CREATE TABLE cities (
name       varchar(80),
location   point
);--添加列;*在已有的表里添加字段:
-- alter table [表名] add column [字段名] [类型];
ALTER TABLE weather ADD country varchar(80);--删除列
ALTER TABLE weather DROP country;
--*删除表中的字段:
alter table [表名] drop column [字段名];--*在表中插入数据:
-- insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);
INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
INSERT INTO weather (date, city, temp_hi, temp_lo) VALUES ('1994-11-29', 'Hayward', 54, 37);--更新行
UPDATE weather
SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
WHERE date > '1994-11-28';--删除行
DELETE FROM weather WHERE city = 'Hayward';--*重命名一个表:
alter table [表名A] rename to [表名B];*重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];*给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];*去除缺省值:
alter table [表名] alter column [字段名] drop default;*修改表中的某行某列的数据:
update [表名] set [目标字段名]=[目标值] where [该行特征];

表删除

--清空表
DELETE FROM tablename;--*删除一个表:
drop table [表名]; --*删除表中某行数据:
delete from [表名] where [该行特征];
delete from [表名];    // 删空整个表

表连接

--表连接
SELECT * FROM weather, cities WHERE city = name;
SELECT city, temp_lo, temp_hi, prcp, date, location FROM weather, cities WHERE city = name;
SELECT weather.city, weather.temp_lo, weather.temp_hi, weather.prcp, weather.date, cities.location FROM weather, cities WHERE cities.name = weather.city;
--内连接
SELECT * FROM weather INNER JOIN cities ON (weather.city = cities.name);
--左外连接
SELECT * FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name);
--右外连接
SELECT * FROM weather RIGHT OUTER JOIN cities ON (weather.city = cities.name);
SELECT W1.city, W1.temp_lo AS low, W1.temp_hi AS high, W2.city, W2.temp_lo AS low, W2.temp_hi AS high FROM weather W1, weather W2 WHERE W1.temp_lo < W2.temp_lo AND W1.temp_hi > W2.temp_hi;
SELECT * FROM weather w, cities c WHERE w.city = c.name;

计算功能

--计算功能
--最大值
SELECT max(temp_lo) FROM weather;
--通过使用一个子查询来查询temp_lo的最大值所对应的城市
SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
SELECT city, max(temp_lo) FROM weather GROUP BY city;
SELECT city, max(temp_lo) FROM weather GROUP BY city HAVING max(temp_lo) < 40;
SELECT city, max(temp_lo) FROM weather WHERE city LIKE 'S%' GROUP BY city HAVING max(temp_lo) < 40;

VIEW 视图

--VIEW 视图
CREATE VIEW myview ASSELECT city, temp_lo, temp_hi, prcp, date, locationFROM weather, citiesWHERE city = name;--#给cities表中的name列添加 primary key
zyw_test=> ALTER TABLE cities ADD PRIMARY KEY(name);
--#给weather表创建一个限制在city列上的 foreign key
zyw_test=> ALTER TABLE weather ADD FOREIGN KEY (city) REFERENCES cities(name);

Inheritance 继承

在PostgreSQL中,一个表可以从0个或多个表继承,一次查询可以查询到某个表中的所有行,或者这个表和这个表所有子表的所有行,默认为后者。
–例如:下面第一个查询查到了city表中的所有行,包括capitals表中的所有行;第二个查询只查到了city表中的所有行,并不包括capitals表。

--Inheritance 继承
CREATE TABLE capitals (state    char(2)) INHERITS (city);
--- 在PostgreSQL中,一个表可以从0个或多个表继承,一次查询可以查询到某个表中的所有行,或者这个表和这个表所有子表的所有行,默认为后者。
--例如:下面第一个查询查到了city表中的所有行,包括capitals表中的所有行;第二个查询只查到了city表中的所有行,并不包括capitals表。
SELECT name, elevation FROM city WHERE elevation > 500;
SELECT name, elevation FROM ONLY city WHERE elevation > 500;

python连接

import sqlalchemy as dbusername = 'username '
password = 'password '
ip = 'IP'
port = '1035'
database_name = 'test_db'
# Create engine. Scheme: "postgres+psycopg2://<USERNAME>:<PASSWORD>@<IP_ADDRESS>:<PORT>/<DATABASE_NAME>"
engine = db.create_engine(f"postgresql+psycopg2://{username}:{password}@{ip}:{port}/{database_name}")# # 利用getpass传入数据库密码,终端不会显示输入的密码:
# import getpass
# pw = getpass.getpass("Please enter password:")
# # create engine
# engine = create_engine(f"postgres+psycopg2://{username}:{pw}@{ip}:{port}/{database_name}")conn = engine.connect()  #连接
result = conn.execute('SELECT * FROM test_schema.weather')  #执行SQL语句
print(result.fetchall())  #fetchall()返回所有元组,fetchone()返回一个元组
print(result)
conn.close()  #关闭连接

参考
https://www.postgresql.org/docs/15/tutorial-table.html
PostgreSql内部命令
https://www.geeksforgeeks.org/introduction-to-psycopg2-module-in-python/

postgreSQL 操作 教程相关推荐

  1. 使用PostgREST的RestAPI操作PostgreSQL数据库教程

    使用PostgREST的RestAPI操作PostgreSQL数据库教程 表和视图 公开的架构中的所有视图和表均可被查询的活动数据库角色访问,并且可供活动数据库角色访问.它们暴露在一级深度路线中.例如 ...

  2. 阿里云数据库HybridDB for PostgreSQL使用教程

    2019独角兽企业重金招聘Python工程师标准>>> 云数据库HybridDB for PostgreSQL(ApsaraDB HybridDB for PostgreSQL)是一 ...

  3. PostgreSQL操作问题(转载)

    PostgreSQL操作问题 4.1)如何只选择一个查询结果的头几行?或是随机的一行? 如果你只是要提取几行数据,并且你在执行查询中知道确切的行数,你可以使用LIMIT功能. 如果有一个索引与 ORD ...

  4. centos7 查看ip_VMware安装CentOS 7操作系统详细操作教程(网络配置)

    网络配置,输入vi /etc/sysconfig/network-scripts/,按下Tab键,根据提示,输入ifcfg-eno16777736,按下Enter键,如下图所示: 图 1 网络配置-1 ...

  5. htc one m7刷Linux,HTC one m7官方刷机详细操作教程

    由于很多软件功能都需要手机进行刷机,所以入手HTC one m7新机的用户一定想着如何刷机.下面就来教你HTC one m7官方刷机的详细操作教程! 准备事项: 1.手机必须能用usb数据线电脑,因为 ...

  6. 来自damon的zencart二次开发教程-3.2复制模板(仿站)操作教程

    用zencart来复制别人的网站成本低,效率高.前面我发了一篇有关开发自己的zencat模板的文章(<来自damon的zencart二次开发教程-3.1开发自己的zencart模板>),里 ...

  7. oem718d 基准站设置_RTK基站设置、7参数、测点、放线等操作教程,文末有视频

    GNSS 介绍 1.GNSS的现状及未来 GNSS(Global Navigation Satellite System)是全球导航卫星系统的英文缩写,它是所有全球导航卫星系统及其增强系统的集合名词, ...

  8. 类操作是什么意思?jQuery的类操作教程分享

    类操作就是通过操作元素的类名进行元素样式操作,当元素样式比较复杂时,如果通过css()方法实现,需要在CSS里编写很长的代码,既不美观也不方便.而通过写一个类名,把类名加上或去掉就会显得很方便.下面通 ...

  9. 松下伺服esi文件_松下贴片机操作教程

    松下贴片机是SMT行业贴片机(延伸阅读:什么是贴片机?贴片机的基本概述)头部品牌之一,与西门子.FUJI并驾齐驱,统称为贴片机界中的三驾马车,在国内长三角.珠三角等众多SMT贴片代加工厂中占有率非常高 ...

最新文章

  1. mysql select 报错
  2. DevExpress v17.2新版亮点——CodeRush篇(二)
  3. 《那些年啊,那些事——一个程序员的奋斗史》——76
  4. boost::multiprecision模块cpp_dec_float_100相关的测试程序
  5. 3-2 :eq(index)过滤选择器
  6. redis日志_面试题之Redis如何保证系统宕机数据不会丢失?
  7. 世界银行开放数据目录:后宫数据集三千个,人生赢家就是你
  8. 在el-table中使用el-popover,没法点击确定或取消来关闭添加 多个按钮
  9. 机器学习单词记录--02章单变量相性回归
  10. 为什么是GCN(转)
  11. JAVA调用java执行,什么结果也没有
  12. java中使用阻塞队列实现生产这与消费这之间的关系
  13. php连接 mysql的三种连接方式
  14. 流程图制作软件绘图技巧:快速学会怎么画流程图
  15. 永中office linux卸载,ubuntu下完全彻底删除永中office的方法
  16. 树的遍历顺序 - dfs序|欧拉序|dfn序(备忘)
  17. java手机怎么测网速_用来检查网络和网速android小程序
  18. 网页制作的形式美的规则
  19. pip安装tensorflow报错:could not find a version that satisfies the requirement grpcio=1.8.6
  20. 求[X,Y]内被除3余1并且被除5余3的整数的和

热门文章

  1. Python用Tkinter实现日期计算器
  2. 『精品素材』20套免费的网页小图标素材下载
  3. 字节加入“大模型之战”;网易已自研数十个超大规模预训练模型;英伟达2023财年净利润同比下滑55%丨每日大事件...
  4. 记一次tomcat漏洞修复补丁升级
  5. PPT:智慧物流园区建设方案
  6. JLink、JTAG接口详细图解
  7. 建筑施工技术【13】
  8. QT常用实用的界面设计技巧
  9. 软件测试规范如写诗一样有多重要?
  10. Codesys用ST语言实现对CSV文件的读写操作的代码案例