文章目录
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