postgresql 实践

这篇具有很好参考价值的文章主要介绍了postgresql 实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 环境搭建

参考:http://www.lvesu.com/blog/main/cms-532.html

1.1. 安装依赖

# 需要安装 postgresql-devel 插件
yum install postgresql-devel*
# 安装 pg 和 py 的驱动:
# Debian系:
apt-get install libpq-dev python-dev
# RedHat系:
yum install libpqxx-devel python-devel

# 安装完成,再使用
pip install psycopg2

1.2. 安装postgres(包含 psql)

sudo apt-get -y install postgresql
# 启动服务
systemctl start postgresql.service
systemctl restart postgresql

1.3. 登录

1.3.1. 修改linux系统postgres用户的密码

PostgreSQL 都会创建一个默认的 linux 用户 postgres,修改该用户密码的方法如下:

  1. 先删除用户 postgres 的历史密码
sudo  passwd -d postgres
  1. 重新设置用户postgres的密码
sudo -u postgres passwd

按照系统提示,输入两次新的密码,即可搞定。

1.3.2. 修改用户postgres的密码

PostgreSQL 数据库默认创建管理员账号:postgres;修改其密码,仅需一下三步:

  1. 首先,登录PostgreSQL
sudo -u postgres psql postgres -p 5432
  1. 然后,修改账号 postgres 的密码
ALTER USER postgres WITH PASSWORD 'Lpf65BsDhDNdaJmH';
  1. 最后,退出 pgsql 客户端

2. 数据库操作

2.1. 创建数据库

# 登录
psql -U postgres
# 执行sql
CREATE DATABASE manage;
# 查询
postgres=# \l;
# 选择数据库
postgres=# \c manage;
# 删除数据库
DROP DATABASE [ IF EXISTS ] name
DROP DATABASE IF EXISTS mydb;

2.2. 创建表

postgres=# CREATE TABLE questions(
	question_id varchar(32) PRIMARY KEY     NOT NULL,
	question_text      varchar(128)    NOT NULL,
	category      varchar(32)     NOT NULL,
	task_id varchar(32)      NOT NULL
);

postgres=# CREATE TABLE answers(
	answer_id varchar(32) PRIMARY KEY     NOT NULL,
	answer_text      varchar(128)    NOT NULL,
	question_id varchar(32)      NOT NULL,
	model_id varchar(32)      NOT NULL,
	task_id varchar(32)      NOT NULL,
	score INT
);
# 查看所有表
postgres=# \dt
# 查看指定表,显示表信息
postgres=# \d answers

# 删除表
DROP TABLE [ IF EXISTS ] name
DROP TABLE IF EXISTS answers;

2.3. 多表查询

https://blog.csdn.net/weixin_67588007/article/details/124832788

2.3.1. 通过 SELECT 子句进行多表查询

语法:
select 字段名
from 表1,表2 …
where 表1.字段 = 表2.字段
and 其它查询条件
例:以学生表 student 和班级表 class 为例
Select student.sid, student.sname, student.classid, class.classid, class.classname
from student,class
where student.classid = class.classid
注意:上面的代码中,以两张表相同的字段信息作为条件,进行两个表联查,但在实际开发中不建议这样使用,最好用主外键约束来实现。

2.3.2. 通过内连接 inner join 进行查询

语法:
select 字段名
from 表1
inner join 表2
on 表1.字段 = 表2.字段
例:以学生表 student 和班级表 class 为例
postgresql 实践,python,postgresql,数据库,python
select student.sid, student.sname, student.classid, class.classid, class.classname
from student
inner join class
on student.classid = class.classid
postgresql 实践,python,postgresql,数据库,python
这种场景下得到的是满足判断条件的 studentclass 内部的数据;正因为得到的是内部共有数据,所以连接方式称为内连接。

2.3.3. 通过外连接left join,left outer join,right join,right outer join,union进行查询

2.3.3.1. left join

语法:
select 字段名
from 表1
left join 表2
on 表1.字段 = 表2.字段
例:以学生表 student 和班级表 class 为例
postgresql 实践,python,postgresql,数据库,python
select student.* , class.*
from student
left join class
on student.classid = class.classid
结果如下,class表中不存在的记录填充Null:
postgresql 实践,python,postgresql,数据库,python
这种场景下得到的是 student 的所有数据,和满足同一条件的 class 的数据;

2.3.3.2. left outer join

相当于left join + [where 表2.字段 is null]
语法:
select 字段名
from 表1
left join 表2
on 表1.字段 = 表2.字段
where 表2.字段 is null
例:以学生表student和班级表class为例
postgresql 实践,python,postgresql,数据库,python
select student.sid,student.sname,class.classid,class.classname
from student
left join class
on student.classid = class.classid
where class.classid is null
postgresql 实践,python,postgresql,数据库,python
这种场景下得到的是student中的所有数据减去"与 class 满足同一条件 的数据",然后得到的student剩余数据

2.3.3.3. right join

语法:
select 字段名
from 表1
right join 表2
on 表1.字段 = 表2.字段
例:以学生表student和班级表class为例
postgresql 实践,python,postgresql,数据库,python
select student.* , class.*
from student
right join class
on student.classid = class.classid
postgresql 实践,python,postgresql,数据库,python
这种场景下得到的是 class 的所有数据,和满足同一条件的 student 的数据;

2.3.3.4. right outer join

相当于right join + [where 表1.字段 is null]
语法:
select 字段名
from 表1
right join 表2
on 表1.字段 = 表2.字段
where 表1.字段 is null
例:以学生表student和班级表class为例
postgresql 实践,python,postgresql,数据库,python
select student.sid,student.sname,class.classid,class.classname
from student
right join class
on student.classid = class.classid
where student.classid is null
postgresql 实践,python,postgresql,数据库,python
这种场景下得到的是 class 中的所有数据减去 "与 student 满足同一条件的数据“,然后得到的 class 剩余数据;

2.3.3.5. left join union right join

语法:
select 字段名
from 表1
left join 表2
on 表1.字段 = 表2.字段
union
select 字段名
from 表1
right join 表2
​​​​​​​on 表1.字段 = 表2.字段
例:以学生表 student 和班级表 class 为例
postgresql 实践,python,postgresql,数据库,python
select student.* , class.*
from student
left join class
on student.classid = class.classid
union
select student.* , class.*
from student
right join class
on student.classid = class.classid
postgresql 实践,python,postgresql,数据库,python
这种场景下得到的是满足某一条件的公共记录,和独有的记录

3. psycopg2 连接数据库

3.1. 连接数据库

使用 psycopg2 模块连接到 PostgreSQL 数据库。能够使用以下连接方法执行所有查询。现在我想指定一个与 public 不同的模式来执行我的 SQL 语句。有没有办法在连接方法中指定模式名称?

conn = psycopg2.connect(host="localhost",
                            port="5432",
                            user="postgres",
                            password="password",
                            database="database",
                            )

我尝试直接在方法内部指定架构。 schema=“schema2” 但我收到以下编程错误。
ProgrammingError: invalid dsn: invalid connection option “schema”

3.2. 批量插入

'''批量插入sql语句'''
import pymysql,string,random,time
def connet_mysql():
    try:
        db=pymysql.connect(host='192.168.31.103',user='root',password='123456',
                           db='test',port=3306)
    except Exception as e:
        print('数据库连接失败',e)
    return db

def insert_data(id,username,password):
    db=connet_mysql()
    cursor=db.cursor()
    **sql_1='insert into user_test(id,user,password) values (%s,%s,%s)'**
    sql_2='select * from user_test'
    # 使用元组插入
    **params=(id,username,password)**
    **cursor.execute(sql_1,params)**
    cursor.execute(sql_2)
    db.commit()
    all=cursor.fetchall()#通过游标,获取查询内容
    print(all)

def info():
    str_1d=string.digits
    str_2a=string.ascii_letters
    str_3=str_1d+str_2a
    for i in range(501,601):
        id=i
        username='user'+str(i)
        password=''.join(random.sample(str_3,6))
        insert_data(id,username,password)
if __name__ == '__main__':
    info()

4. 数据库连接池

安装:
https://blog.csdn.net/weixin_44041700/article/details/110454901

使用:
https://blog.51cto.com/u_16213421/7115953
https://www.cnblogs.com/xy-ouyang/p/12987676.html文章来源地址https://www.toymoban.com/news/detail-716417.html

到了这里,关于postgresql 实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python数据库编程全指南SQLite和MySQL实践

    本文分享自华为云社区《Python数据库编程全指南SQLite和MySQL实践》,作者: 柠檬味拥抱。 首先,我们需要安装Python的数据库驱动程序,以便与SQLite和MySQL进行交互。对于SQLite,Python自带了支持;而对于MySQL,我们需要安装额外的库,如 mysql-connector-python 。 SQLite是一种轻量级的

    2024年03月28日
    浏览(60)
  • python+django+mysql项目实践二(前端及数据库)

    Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 添加模板 在templates下创建 views文件中添加 在setting文件中进行配置 在Terminal输入命令下发指令

    2024年02月14日
    浏览(60)
  • postgresql|数据库|MySQL数据库向postgresql数据库迁移的工具pgloader的部署和初步使用

    MySQL数据库和postgresql数据库之间的差异并不多,这里的差异指的是对SQL语言的支持两者并不大,但底层的东西差异是非常多的,例如,MySQL的innodb引擎概念,数据库用户管理,这些和postgresql相比是完全不同的(MySQL用户就是用户,没有角色,postgresql有用户,有角色,但差异不

    2024年02月14日
    浏览(85)
  • postgresql数据库定时备份到远程数据库

    1.老规矩,服务器目录结构: conf目录无内容 profile: 其中: 最后一行 export PGPASSWORD=‘root’ 是需要备份的数据库的密码,因为直接用 pg_dump 命令备份需要输入密码交互,而我们需要达到自动备份,所以借助这种方式不需要输入密码 docker-compose.yml: 启动容器: 然后再data目录下面

    2024年02月09日
    浏览(48)
  • 【数据库】什么是 PostgreSQL?开源数据库系统

    PostgreSQL 是一个开源的对象关系数据库系统,本文,我们将讨论 PostgreSQL、它的用途和好处。 PostgreSQL 是由 PostgreSQL Global Development Group 开发的高级 开源关系数据库管理系统(RDBMS) 。它作为 POSTGRES 项目的一部分于 1986 年在加州大学伯克利分校启动,它最初于 1996 年 7 月 8 日发布

    2023年04月08日
    浏览(48)
  • PostgreSQL Linux操作PostgreSQL数据库

    PostgreSQL教程 菜鸟教程:https://www.runoob.com/postgresql/postgresql-tutorial.html 登录PG数据库:psql -U 用户名(U需要大写) 登录PG数据库(指定主机、端口,并进入指定数据库): psql -U 用户名 -h 127.0.0.1 -p 5432 -d 数据库名 -U 登录的用户名 -h 连接的主机(默认127.0.0.1,可替换成远程主机

    2024年02月11日
    浏览(64)
  • 数据库新闻速递 -- POSTGRESQL 正在蚕食数据库市场 (翻译)

    开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请加 liuaustin3微信号 ,在新加的朋友会分到3群(共1140人左右 1 + 2 + 3) 尽管NoSQL数据库继续蓬勃发展,但关系型数据库仍

    2024年02月13日
    浏览(64)
  • [运维|数据库] docker postgresql数据库环境变量配置

    要配置Docker中的PostgreSQL数据库的环境变量,可以使用以下方法: 使用Docker命令行: 将 用户名 , 密码 , 数据库名 替换为你想要设置的实际值。这将创建一个名为 mypostgres 的容器,并将 PostgreSQL 的用户名、密码和数据库名设置为指定的值。 -p 5432:5432 指定了容器内部和主机之间

    2024年02月09日
    浏览(66)
  • PostgreSQL-数据库命令

    一个数据库是一个或多个模式的集合,而模式包含表、函数等。因此,完整的逻辑组织结构层次是服务器实例(PostgreSQL Server)、数据库(Database)、模式(Schema)、表(Table),以及某些其他对象(如函数)。一个PostgreSQL服务器实例可以管理多个数据库。当应用程序连接到一

    2024年02月14日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包