返回顶部
首页 > 资讯 > 后端开发 > Python >python实现sqlalchemy的使用概述
  • 187
分享到

python实现sqlalchemy的使用概述

pythonsqlalchemy使用pythonsqlalchemy 2022-06-02 22:06:19 187人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录使用概述一、创建引擎和会话二、定义类来表示虚拟表格三、增删改查四、进阶技能sqlAlchemy解读: https://www.jb51.net/article/174565.htm sqlAlchemy解读:Ht

目录
  • 使用概述
    • 一、创建引擎和会话
    • 二、定义类来表示虚拟表格
    • 三、增删改查
    • 四、进阶技能

sqlAlchemy解读: https://www.jb51.net/article/174565.htm

sqlAlchemy解读:Https://www.jb51.net/article/173950.htm

特点是操纵python对象而不是SQL查询,也就是在代码层面考虑的是对象,而不是SQL,体现的是一种程序化思维,这样使得Python程序更加简洁易懂。

具体的实现方式是将数据库表转换为Python类,其中数据列作为属性,数据库操作作为方法。

  1. abstract # 辅助sqlAlchemy实现类的继承,自动继承属性,省去super()
  2. SQLAlchemy定义的ORM,在继承父级ORM时候,Foreign Key外键是不能继承的,它强制要求在子类中重新定义。

使用概述

在使用sqlalchemy访问数据库的时候,以类的形式表示表格,因此在使用之前,需要先定义类。

类的定义有三种:基类BASE、父类、子类

基类是sqlalchemy底层的;当需要一份数据切分为多个子表的时候,或多个表的字段一致时,可以使用一个父类定义字段的类型,多个子表继承父类的属性。

一、创建引擎和会话

通过创建引擎、绑定引擎来创建会话,实现数据库的访问。


from sqlalchemy import create_engine                          # 引擎
from sqlalchemy.orm import sessionmaker                       # 创建orm的会话池,orm和sql均可以管理对象关系型数据库,需要绑定引擎才可以使用会话,

# 创建连接
engine = create_engine("Mysql+pymysql://root:1234;@127.0.0.1/test", # 需要安装mysql和pymysql的模块,用户名:密码@ip地址/某个数据库
                       #echo=True,         # 打印操作对应的SQL语句
                       pool_size=8,       # 连接个数
                       pool_recycle=60*30 # 不使用时断开
                       )

# 创建session
DbSession = sessionmaker(bind=engine)  # 会话工厂,与引擎绑定。
session = DbSession()                  # 实例化

session.close()  # 关闭会话

二、定义类来表示虚拟表格

在使用sqlalchemy访问数据库的时候,以类的形式表示表格,因此在使用之前,需要先定义类。使用类的名称而不是tablename实现之后的增删改查。


# 导入定义类需要的模块
from sqlalchemy.ext.declarative import declarative_base       # 调用sqlalchemy的基类
from sqlalchemy import Column, Index, distinct, update        # 指定字段属性,索引、唯一、DML
from sqlalchemy.types import *                                # 所有字段类型

直接建立一个可调用的表格

需要先继承基类,在定义__init__函数,设置输入参数。


# 创建库表类型
Base = declarative_base()  # 调用sqlalchemy的基类

class Users(Base):
    '''继承基类'''
    __tablename__ = "users"                     # 数据表的名字
    __table_args__ = {'extend_existing': True}  # 当数据库中已经有该表时,或内存中已声明该表,可以用此语句重新覆盖声明。
    id = Column(Integer, primary_key=True)
    name = Column(String(64), unique=True)
    #email = Column(String(64))

    def __init__(self, name, email):
        self.name = name
        self.email = email                      # 声明需要调用的特征,可以只声明数据库中表格列的子集
        
Base.metadata.create_all(engine)                # 表生效:将所有定义的类,使用引擎创建,此时可以在数据库中看到这些表。

创建多个相同列属性的表格 先建立一个表格的父类,指定列的属性,再通过继承父类

不同的表


# 创建库表类型
Base = declarative_base()  # 调用sqlalchemy的基类

class model_data(BASE):  
    '''创建数据库表类:模型所需的基本字段'''
    __abstract__ = True                         # 辅助sqlAlchemy实现类的继承,自动继承属性,省去super()
    __table_args__ = {'extend_existing': True}  # 若表的声明在内存中已存在,则重新声明表的名称,不然会报错
    ai_xdr_id = Column(BigInteger(), primary_key=True, unique=True, autoincrement= True)
    ai_sdk_id = Column(BigInteger())

class TrainData(model_data): # 训练集表
    '''继承model_data的属性,并将表的名字定义为:'xxx_train_data'存入数据库 '''
    __tablename__ = 'xxx_train_data'
    
class DevData(model_data):   # 开发集表
    '''表的名字定义为:'xxx_dev_data' '''
    __tablename__ = 'xxx_dev_data'

class TestData(model_data):  # 测试集表
    __tablename__ = 'xxx_test_data'

Base.metadata.create_all(engine)                # 表生效:将所有定义的类,使用引擎创建,此时可以在数据库中看到这些表。

三、增删改查

因为是会话操作,当某个语句,例如增加数据时,不成功的时候需要回滚。

增加数据


# 增加数据
add_user = Users("test3", "test123@qq.com")
session.add(add_user)
session.commit()

# add_users = Users(("test", "test123@qq.com"),('a','b')))
# session.add(add_users)
# session.commit()

# 当上述语句出现执行错误时,需要执行回滚语句,才能继续操作
session.rollback()

删除数据


delete_users = session.query(Users).filter(Users.name == "test").first()
if delete_users:
    session.delete(delete_users)
    session.commit()
    
session.query(Users).filter(Users.name == "test").delete()
session.commit()

更改数据


# 改
session.query(Users).filter_by(id=1).update({'name': "Jack"})

users = session.query(Users).filter_by(name="Jack").first()
users.name = "test"

查找数据


users = session.query(Users).filter_by(id=5).all()
for item in users:
    print(item.name)
    print(item.email)   # 若未在类中声明,则无法访问数据库中该表的属性。

四、进阶技能

将DataFrame格式的数据导入数据库


class DataAccessLayer:# 数据连接层、定义了连接和关闭。
    '''数据连接层、定义了连接和关闭。'''
    def __init__(self):
        self.ENGINE = None                 # 引擎
        self.SESSION = None                # 会话
        self.conn_string = "mysql+pymysql://root:1234;@127.0.0.1/test"  ## 需要安装mysql和pymysql的模块,用户名:密码@ip地址/某个数据库

    def connect(self):
        '''连接时建立引擎和会话。'''
        self.ENGINE = create_engine(self.conn_string, encoding='utf-8',isolation_level="AUTOCOMMIT", connect_args={'connect_timeout': 7200})
        # self.ENGINE = create_engine(self.conn_string, encoding='utf-8',connect_args={'connect_timeout': 7200})
        self.SESSION = sessionmaker(bind=self.ENGINE)()

    def disconnect(self):
        '''断开时,关闭引擎。'''
        self.ENGINE.close()

def df_save_db(df,tablename):
    '''将数据集DataFrame保存到数据库'''
    db_ac = DataAccessLayer()
    db_ac.connect()
    conn = db_ac.ENGINE.connect()
    df.to_sql(name=tablename, con=conn, if_exists='append', index=False)
    conn.close()
    print('%s updated.'%tablename)

df = pd.read_csv('traindata_jiangsu_donghai.csv')
df_save_db(df,'traindata_jiangsu_donghai')

到此这篇关于python实现sqlalchemy的使用的文章就介绍到这了,更多相关python sqlalchemy使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python实现sqlalchemy的使用概述

本文链接: https://lsjlt.com/news/11209.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python实现sqlalchemy的使用概述
    目录使用概述一、创建引擎和会话二、定义类来表示虚拟表格三、增删改查四、进阶技能sqlAlchemy解读: https://www.jb51.net/article/174565.htm sqlAlchemy解读:ht...
    99+
    2022-06-02
    python sqlalchemy使用 python sqlalchemy
  • SpringCloudOpenFeign概述与使用
    目录OpenFeign概述OpenFeign使用引入依赖编写服务调用Service接口编写被调用的方法启动服务调用模块测试OpenFeign概述 OpenFeign 可以声明式的实现...
    99+
    2023-01-31
    SpringCloud OpenFeign SpringCloud OpenFeign使用
  • python 字典的概念叙述和使用方法
    目录1. 一个简单的字典2. 使用字典2.1 访问字典中的值2.2 添加键-值对2.3 修改字典中的值2.4 删除键-值对3. 遍历字典3.1 遍历所有键-值对3.2 遍历字典中的所...
    99+
    2023-02-14
    python 字典使用 python 字典的概念
  • python数据库操作--数据库使用概述
    目录1. 数据库基础知识2. 访问数据库基本原理1.应用系统2.数据库驱动程序 3.数据库系统3. ODBC与ADO1.** ODBC**2.ADO4. 关系型数据库总结1. 数据库基础知识 数据库(DB...
    99+
    2022-06-02
    python 数据库使用
  • 教大家使用Python SqlAlchemy
    本文实例解析Python SqlAlchemy的使用方法,分享给大家供大家参考,具体内容如下 1.初始化连接 from sqlalchemy import create_engine from sql...
    99+
    2022-06-04
    Python SqlAlchemy
  • .NET 6线程池ThreadPool实现概述
    目录前言任务的调度基本调度单元IThreadPoolWorkItem 实现类的实例。Task全局队列本地队列偷窃机制Worker Thread 的生命周期管理线程注入实验.NET 5...
    99+
    2024-04-02
  • SpringCloud OpenFeign概述与使用教程
    目录Feign使用传参URL拼接传参GET传参POST传参调用拓展日志打印Feign 它是声明性(注解)web服务客户端 要使用Feign,需创建一个接口并对其进行注解它是一个远程调...
    99+
    2023-02-06
    SpringCloud OpenFeign SpringCloud OpenFeign使用
  • android实现session保持简要概述及实现
    在最近写的一个Android中需要请求web服务器中的数据,有一个登录Activity,登录后会到MainActivity,这中间登录和MainActivity都需要请求php...
    99+
    2022-06-06
    session Android
  • python中SQLAlchemy使用前端页面实现插入数据
    目录1.实验效果2.主main.py文件3.前端mysql.html文件1.实验效果 如果插入的数据已经存在于数据库中,则出现以下提示: 查看数据库表中的数据,发现已经将数据存...
    99+
    2024-04-02
  • python的input,print,eval函数概述
    目录input()函数使用方法eval()函数使用方法print函数总结input()函数 input()函数可以通过控制台获取用户的输入,这个函数可以包含一些提示信息以便提示用户输...
    99+
    2024-04-02
  • AJPFX可变参数的概述和使用
    这篇文章主要讲解了“AJPFX可变参数的概述和使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“AJPFX可变参数的概述和使用”吧!A:可变参数概述定义方法的时候不知道该定义多少个参数B:格...
    99+
    2023-06-02
  • Java中简单实用Quartz概述
    目录1.Quartz是什么2. Quartz谁维护?3. 简单的应用3.1 需求描述3.1.1. Spring中自带的3.1.2. Quartz的简单使用4. Quartz相较Spr...
    99+
    2023-02-15
    java  quartz java  quartz使用
  • Flask使用SQLAlchemy实现持久化数据
    目录项目引入flask-sqlalchemy ORM简介及模型定义 表关系类型及编码实现 一对多关系(多对一关系) 一对一关系 多对多关系 数据库基本操作 插入 更新 查询 删除 项...
    99+
    2024-04-02
  • React组件的用法概述
    目录组件的定义:React组件函数式组件类式组件组件实例三大属性statepropsrefs与事件处理组件的定义: 理解:用来实现局部功能效果的代码和资源的集合(html/css/j...
    99+
    2023-02-17
    React组件的用法 React组件
  • python中SQLAlchemy怎么使用前端页面实现插入数据
    这篇文章主要介绍“python中SQLAlchemy怎么使用前端页面实现插入数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中SQLAlchemy怎么使用前端页面实现插入数据”文章能帮...
    99+
    2023-06-29
  • 怎么使用Python描述器实现ORM模型
    本文小编为大家详细介绍“怎么使用Python描述器实现ORM模型”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python描述器实现ORM模型”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。访问或者修改描...
    99+
    2023-06-29
  • 怎么在Python中使用sqlalchemy库
    这期内容当中小编将会给大家带来有关怎么在Python中使用sqlalchemy库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和...
    99+
    2023-06-14
  • Python中sqlalchemy框架如何使用
    今天就跟大家聊聊有关Python中sqlalchemy框架如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。安装安装#进入虚拟环境#执行./python3 -m&nbs...
    99+
    2023-06-20
  • Android中bindService基本使用方法概述
    Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯bindSe...
    99+
    2022-06-06
    方法 Android
  • Android中startService基本使用方法概述
    Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯startS...
    99+
    2022-06-06
    方法 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作