跳转至

SQLAlchemy框架支持

SQLAlchemy框架支持

本文档描述了 SeaboxSQL 数据库对于SQLAlchemy 框架的支持情况和配置说明,面向所有使用SeaboxSQL数据库的用户,主要是数据库管理员和应用程序开发人员。

有关 SQLAlchemy 的更多信息,请参阅以下资源:SQLAlchemy 1.3 Documentation https://docs.sqlalchemy.org/en/13/dialects/postgresql.html

概述

​SQLAlchemy 是一个基于Python实现的ORM框架,该框架建立在 Python DB API 之上,使用关系对象映射进行数据库操作。 ​ SQLAlchemy 本身无法操作数据库,其必须使用第三方插件,Dialect用于和数据库交互,根据配置的不同而调用不同的数据库 API 从而实现对数据库的操作。

​说明:可使用postgresql的方式连接集群。包括相关的方言包。

SQLAlchemy使用原理图

SQLAlchemy 使用说明

配置信息

​安装sqlalchemy和psycopg2插件

pip install sqlalchemy
pip install psycopg2

可以使用以下语句连接到数据库:

engine_url = URL.create( 'postgresql+psycopg2', username='用户名', password='密码', host='192.168.2.168', port=7300, database='ssbm' ) engine = create_engine(engine_url)

连接串格式为dialect+driver://username:password@host:port/database

执行普通SQL

连接数据库执行普通sql

from sqlalchemy import create_engine, URL,text

# 使用URL对象来安全地传递数据库连接信息
engine_url = URL.create(
    'postgresql+psycopg2',
    username='用户名',
    password='密码',
    host='192.168.2.168',
    port=7300,
    database='ssbm'
)
engine = create_engine(engine_url)
 
# 之后的操作相同
with engine.connect() as conn:
    result = conn.execute(text("SELECT * FROM public.sjltest"))
    for row in result:
        print(row)
ORM 基本操作
from sqlalchemy import Table, Column, Integer, String, MetaData,URL,create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session

#创建连接
engine_url = URL.create(
    'postgresql+psycopg2',
    username='sjl',
    password='sjl',
    host='192.168.2.168',
    port=7300,
    database='ssbm'
)
engine = create_engine(engine_url)
metadata = MetaData()
Base = declarative_base()

#表映射实体
class User(Base):
   __tablename__ = 'users'

   id = Column(Integer, primary_key=True)
   name = Column(String)
   email = Column(String)


# drop 表
Base.metadata.drop_all(engine)

# create 表
Base.metadata.create_all(engine)


# 创建一个新的 Session
session = Session(engine)
# 创建一个新的 User 对象
new_user = User(name='John', email='john@example.com')
# 添加到 session
session.add(new_user)

#select
results = session.query(User).all()

for r in results:
    print(r.id,r.name,r.email)

#update
session.query(User).filter(User.id == 1).update({"email": User.email + "(append data1)"},synchronize_session=False)


# 提交(保存)更改
session.commit()

#select
results = session.query(User).all()

for r in results:
    print(r.id,r.name,r.email)

#关闭session
session.close()