我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python实现sqlalchemy的使用概述

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python实现sqlalchemy的使用概述

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

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使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python实现sqlalchemy的使用概述

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python实现sqlalchemy的使用概述

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

python 字典的概念叙述和使用方法

Python中还有一个很重要的数据类型就是字典,其实集合的底层使用的也是字典,这篇文章主要介绍了python 字典的概念叙述和使用方法,需要的朋友可以参考下
2023-02-14

python数据库操作--数据库使用概述

目录1. 数据库基础知识2. 访问数据库基本原理1.应用系统2.数据库驱动程序3.数据库系统3. ODBC与ADO1.** ODBC**2.ADO4. 关系型数据库总结1. 数据库基础知识 数据库(DB),可以长期存储在计算机内、有组织的、
2022-06-02

AJPFX可变参数的概述和使用

这篇文章主要讲解了“AJPFX可变参数的概述和使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“AJPFX可变参数的概述和使用”吧!A:可变参数概述定义方法的时候不知道该定义多少个参数B:格
2023-06-02

python中SQLAlchemy怎么使用前端页面实现插入数据

这篇文章主要介绍“python中SQLAlchemy怎么使用前端页面实现插入数据”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中SQLAlchemy怎么使用前端页面实现插入数据”文章能帮
2023-06-29

怎么使用Python描述器实现ORM模型

本文小编为大家详细介绍“怎么使用Python描述器实现ORM模型”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Python描述器实现ORM模型”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。访问或者修改描
2023-06-29

Python描述符的使用

前言作为一位python的使用者,你可能使用python有一段时间了,但是对于python中的描述符却未必使用过,接下来是对描述符使用的介绍场景介绍为了引入描述符的使用,我们先设计一个非常简单的类:class Product(): d
2023-01-30

如何分析增强for的概述和使用

本篇文章为大家展示了如何分析增强for的概述和使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。增强for的概述和使用(foreach)1、增强for的概述和使用(foreach)
2023-06-02

Flask如何使用SQLAlchemy实现持久化数据

这篇文章主要介绍“Flask如何使用SQLAlchemy实现持久化数据”,在日常操作中,相信很多人在Flask如何使用SQLAlchemy实现持久化数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flask
2023-06-20

Python中的字符串常用方法整理概述

Python中的字符串是一种不可变的序列类型,使用单引号(')或双引号(")括起来。本文整理概述了python中字符串常用方法,文中有详细的代码示例,对学习或工作有一定的帮助,需要的同学可以参考一下
2023-05-18

如何概述Python中常用的IDE开发工具

这篇文章给大家介绍如何概述Python中常用的IDE开发工具,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。概述 “工欲善其事,必先利其器”,如果说编程是程序员的手艺,那么IDE就是程序员的吃饭家伙了。IDE的全称是In
2023-06-17

Python流行ORM框架sqlalchemy的简单使用

安装 http://docs.sqlalchemy.org 1、安装#进入虚拟环境 #执行 ./python3 -m pip installimport sqlalchemy print(sqlalchemy.__version__) #
2022-06-02

再述:python中redis的使用(P

redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。redi
2023-01-31

Python怎么使用描述符实现属性类型检查

这篇“Python怎么使用描述符实现属性类型检查”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么使用描述符实现
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录