目录
一、SQLAlchemy简介
SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchemy采用了类似于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。
SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中成为广泛使用的ORM工具之一,不亚于Django的ORM框架。
二、安装postgresql
postgresql参考:
【大模型应用开发-Postgresql数据库】(二)Linux使用Docker安装Postgresql-CSDN博客
三、安装依赖
# pip install sqlalchemy psycopg2
四、增删改查操作
1、初始化连接
import time
import uuid
import datetime
import sqlalchemy
import sqlalchemy.orm as orm
from sqlalchemy.orm import declarative_base
from sqlalchemy import text
# pip install sqlalchemy psycopg2
Base = declarative_base()
# 创建数据库连接
url = 'postgresql://admin:admin@172.30.1.*:5432/mytest'
engine = sqlalchemy.create_engine(url)
Session = orm.sessionmaker(bind=engine)
session = Session()
# 定义数据模型
class TestData(Base):
__tablename__ = "tb_test_1"
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)
name = sqlalchemy.Column(sqlalchemy.String(256), nullable=True)
uuid = sqlalchemy.Column(sqlalchemy.String(64), unique=True)
add_time = sqlalchemy.Column(sqlalchemy.DateTime())
data = sqlalchemy.Column(sqlalchemy.Text(), default='{}')
def __init__(self, name, uuid, data='{}', add_time=None):
self.name = name
self.uuid = uuid
self.data = data
self.add_time = add_time if None != add_time else datetime.datetime.now()
2、创建表
def create_table():
with engine.connect() as connection:
# 创建表格(如果不存在)
Base.metadata.create_all(engine)
3、插入一行数据
# 插入一行数据
def add_one():
# 创建会话
uuid_str = str(uuid.uuid4())
local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
new_user = TestData(name='zhangsan', uuid=uuid_str, data='{"name": "zhangsan"}', add_time=local_time)
# 添加到session:
session.add(new_user)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()
4、插入多行数据
def add_multi():
local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
data_list = []
for i in range(10):
uuid_str = str(uuid.uuid4())
data_list.append(TestData(name='zhangsan', uuid=uuid_str, data='{"name": "zhangsan"}', add_time=local_time))
# 添加到session:
session.add_all(data_list)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()
5、查询操作
# 查询操作
def select_data():
# 创建Session
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(TestData).filter(TestData.id == '1' and TestData.name == 'zhangsan').one()
print('name:', user.name)
print('data:', user.data)
session.close() # 关闭Session
6、更新数据
# 更新操作
def update_data():
users = session.query(TestData).filter_by(name="zhangsan").first() # 查询条件
users.data = '{"name": "lisi"}' # 更新操作
session.add(users) # 添加到会话
session.commit() # 提交即保存到数据库
session.close() # 关闭会话
7、删除数据
# 删除操作
def delete_one():
delete_data = session.query(TestData).filter(TestData.id == "1").first()
if delete_data:
session.delete(delete_data)
session.commit()
session.close() # 关闭会话
8、删除表
# 删除表
def drop_table():
session.execute(text('drop table tb_test_1'))
session.commit()
session.close()
五、完整代码
import time
import uuid
import datetime
import sqlalchemy
import sqlalchemy.orm as orm
from sqlalchemy.orm import declarative_base
from sqlalchemy import text
# pip install sqlalchemy psycopg2
Base = declarative_base()
# 创建数据库连接
url = 'postgresql://admin:admin@172.30.1.23:55433/mytest'
engine = sqlalchemy.create_engine(url)
Session = orm.sessionmaker(bind=engine)
session = Session()
# 定义数据模型
class TestData(Base):
__tablename__ = "tb_test_1"
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)
name = sqlalchemy.Column(sqlalchemy.String(256), nullable=True)
uuid = sqlalchemy.Column(sqlalchemy.String(64), unique=True)
add_time = sqlalchemy.Column(sqlalchemy.DateTime())
data = sqlalchemy.Column(sqlalchemy.Text(), default='{}')
def __init__(self, name, uuid, data='{}', add_time=None):
self.name = name
self.uuid = uuid
self.data = data
self.add_time = add_time if None != add_time else datetime.datetime.now()
def create_table():
with engine.connect() as connection:
# 创建表格(如果不存在)
Base.metadata.create_all(engine)
# 插入一行数据
def add_one():
# 创建会话
uuid_str = str(uuid.uuid4())
local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
new_user = TestData(name='zhangsan', uuid=uuid_str, data='{"name": "zhangsan"}', add_time=local_time)
# 添加到session:
session.add(new_user)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()
# 插入多行数据
def add_multi():
local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
data_list = []
for i in range(10):
uuid_str = str(uuid.uuid4())
data_list.append(TestData(name='zhangsan', uuid=uuid_str, data='{"name": "zhangsan"}', add_time=local_time))
# 添加到session:
session.add_all(data_list)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()
# 查询操作
def select_data():
# 创建Session
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(TestData).filter(TestData.id == '1' and TestData.name == 'zhangsan').one()
print('name:', user.name)
print('data:', user.data)
session.close() # 关闭Session
# 更新操作
def update_data():
users = session.query(TestData).filter_by(name="zhangsan").first() # 查询条件
users.data = '{"name": "lisi"}' # 更新操作
session.add(users) # 添加到会话
session.commit() # 提交即保存到数据库
session.close() # 关闭会话
# 删除操作
def delete_one():
delete_data = session.query(TestData).filter(TestData.id == "1").first()
if delete_data:
session.delete(delete_data)
session.commit()
session.close() # 关闭会话
# 删除表
def drop_table():
session.execute(text('drop table tb_test_1'))
session.commit()
session.close()
def run():
create_table()
# add_one()
add_multi()
# select_data()
# update_data()
# delete_one()
# drop_table()
if __name__ == '__main__':
run()