PostgreSQL and SQLAlchemy [ubuntu]

PostgreSQL

×××PostgreSQL官方教程×××

安装PostgreSQL

首先,你可以检查下是否已经安装过PostgreSQL

$ psql --version
psql (PostgreSQL) 10.15 (Ubuntu 10.15-0ubuntu0.18.04.1)

如果没有安装,则装一下。

sudo apt-get update
sudo apt-get install postgresql postgresql-client

常用PostgreSQL命令

安装完之后,你就可以使用了,他这里面的逻辑要好好体会下。不说废话,大家在下面的实践中自行体会。

# 首先你需要变成root用户
sudo -i
# 然后你要变成postgres用户, 这是PostgreSQL的超级用户
su postgres
# 此时你还没进入数据库,psql进入数据库。
~$ psql
psql (12.4 (Ubuntu 12.4-0ubuntu0.20.04.1))
Type "help" for help.
postgres=#
# 注意:此时,你是以postgres用户,进入到了名为postgres的数据库(database)中

进入PostgreSQl 之后,你可以查看当前已存在的数据库,创建数据库,删除数据库,也可以对增删用户,以及查看数据库的表啊等等。

Command Description
\l 查看已有的数据库(database)
\l+ 查看已有的数据库(database)的详细信息
\dt 查看已有的表(table)
\dt+ 查看已有的表(table)的详细信息
\dn 查看已有的模式(schemas)
\du 查看所有的用户(role)
\conninfo 查看当前连接信息(db host, db name, db user)

常用PostgreSQL操作

修改用户密码

postgres=# \password postgres

添加用户并设置密码

postgres=# CREATE USER zdx WITH PASSWORD '123456'; # 创建用户

创建数据库并指定一个拥有者

postgres=# CREATE DATABASE test OWNER zdx;

连接另一个数据库

postgres=# \c test

删除table中的记录

DELETE FROM table_name WHERE ID=1; #没有WHERE的话,就删除整个表的内容。

删除table

drop table table_name;

我们已经创建了一个test database. 接下来我们准备使用SQLAIchemy工具来进一步操作这个数据库,比如建表等。关于更多使用PostgreSQL命令直接操作数据库大家参考官方教程

SQLAlchemy

×××SQLAlchemy1.3官方教程×××
个人觉得还不错的一个SQLAlchemy教程

安装SQLAlchemy

pip install sqlalchemy

检查版本

import sqlalchemy as db
db.__version__
'1.3.17'

连接某个已经创建的数据库

# Scheme: "postgres+psycopg2://<USERNAME>:<PASSWORD>@<IP_ADDRESS>:<PORT>/<DATABASE_NAME>"
DATABASE_URI = 'postgres+psycopg2://zdx:123456@localhost:5432/test'
engine = db.create_engine(DATABASE_URI)

在这里插入图片描述Tips:
engine.execute(…) 可以直接用engine来操作数据库。
也可以通过connection来操作:

trans = conn.begin()
conn.execute('INSERT INTO "EX1" (name) '
             'VALUES ("Hello")')
trans.commit()

在这里插入图片描述 Engine.execute() 和 Connection.execute() 功能一样。

建立一个Table

ORM工具操作数据库最大特点,就在于把数据库里的内容都当做object.
定义一个Table,就是对base类的继承。

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
# 定义一个users Table object
from sqlalchemy import Column, Integer, String
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    password = Column(String)
    
    def __repr__(self):
        return f'user {self.name}'

此时只是定义了users 这个Table, 数据库中还没任何改变,执行下面语句就会在连接的数据库中,创建一个users的空表。

Base.metadata.create_all(engine)

到数据库中,查看是否创建成功

test=# \d
            List of relations
 Schema |     Name     |   Type   | Owner 
--------+--------------+----------+-------
 public | users        | table    | zdx
 public | users_id_seq | sequence | zdx
(2 rows)

使用session往table里插入记录

from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
s = Session()
user = User(name='John Snow', password='johnspassword')
s.add(user)
s.commit()
#s.close()

到数据库中,查看是否插入成功

test=# select * from users;
 id |   name    |   password    
----+-----------+---------------
  1 | John Snow | johnspassword
(1 row)

插入多条记录

s.add_all([
    User(name='Wendy Williams', password='wendypassword'),
    User(name='Mary Contrary', password='marypassword'),
    User(name='Fred Flintstone', password='fredpassword')
])
s.commit()

到数据库中,查看是否插入成功

test=# select * from users;
 id |      name       |   password    
----+-----------------+---------------
  1 | John Snow       | johnspassword
  2 | Wendy Williams  | wendypassword
  3 | Mary Contrary   | marypassword
  4 | Fred Flintstone | fredpassword
(4 rows)

使用session查询(query)

query = s.query(User) # 查询 user table
query.count() #总共多少记录
query.first() #显示查询到第一条记录
query.all() #显示查询的所有的记录

session中的roll back

fake_user = User(name='fakeuser', password='fakepassword')
s.add(fake_user)
s.query(User).filter_by(name='fakeuser').first()

user fakeuser

fake_user in s

True

s.rollback()
fake_user in s

False

猜你喜欢

转载自blog.csdn.net/zdx1996/article/details/110634621