SqlAlchemy ORM 学习

从Arcemu魔兽模拟器解析MMORPG服务器架构与搭建实践 客户端-服务器模型是网络游戏的核心架构,其原理基于网络协议实现双向通信。在MMORPG领域,这种架构的技术价值在于支撑大规模玩家同时在线的复杂交互。通过逆向工程模拟官方协议,开发者可以深入理解网络编程、数据库设计与游戏逻辑的实现机制。Arcemu作为一个经典的《魔兽世界》服务端模拟器,采用模块化设计与数据驱动逻辑,完整实现了登录认证、角色管理、技能系统与AI行为等核心功能。其应用场景不仅限于搭建私人游戏服务器,更可作为学习大型C++项目架构、事件驱动编程与数据持久化的实践案例。通过分析其多线程模型与协议处理 阅读详情

转载原文地址:http://blog.youkuaiyun.com/yueguanghaidao/article/details/7485345,http://blog.youkuaiyun.com/yueguanghaidao/article/details/7485967

 

--------------------------第一部分--------------------------

一直觉得orm很高深,今天时间比较充分打算学习下

安装说一点,我的系统是win7 64位家庭普通版

用easy_install安装sqlalchemy出现问题,于是下载最新版0.7.6的zip压缩包,用python setup.py install出现错误:

WARNING: The C extension could not be compiled, speedups are not enabled.
Plain-Python build succeeded.

自己未解决,向广大朋友们请教了

 

没办法又下了0.6.8版的zip包,这次安装成功了。

开始我的sqlalchemy之旅

本文主要是翻译这篇文章(还有自己的操作和思考,我会竟可能做到有图有真相,呵呵):点击打开链接:如果有错请指正

http://www.blog.pythonlibrary.org/2010/02/03/another-step-by-step-sqlalchemy-tutorial-part-1-of-2/

创建我们第一个脚本:

        我们将利用SqlAlchemy创建我们第一个例子,创建一个简单的表,存储用户的姓名,年龄和密码

复制代码
from sqlalchemy import create_engine
from sqlalchemy import MetaData, Column, Table, ForeignKey
from sqlalchemy import Integer, String
engine = create_engine('sqlite:///tutorial.db',echo=True)
metadata = MetaData(bind=engine)
users_table = Table('users', metadata,
                    Column('id', Integer, primary_key=True),
                    Column('name', String(40)),
                    Column('age', Integer),
                    Column('password', String),
                    )
addresses_table = Table('addresses', metadata,
                        Column('id', Integer, primary_key=True),
                        Column('user_id', None, ForeignKey('users.id')),
                        Column('email_address', String, nullable=False)
                        )
# create tables in database
metadata.create_all()
复制代码

深入看下代码:
首先需要导入一些包,然后我们创建一个数据库连接engine对象。在这里我们使用sqlite数据库,不需要提供认证信息。

 

你肯定注意到了,我们将echo设置为True,目的是SqlAlchemy将会把执行sql命令的过程输出到标准输出。这主要是便于调试,但如果是用于生产环境中应该设置为False。

然后我们创建一个MetaData对象,这个对象包含了数据库的所有元数据。它由表的描述信息和其它的数据库schema-level 的对象组成。我们可以在创建MetaData对象时就把它绑定到我们的数据库,也可以在上面代码的最后即 create_all 时绑定。在第二部分有示例(点击打开链接)

下面部分就是创建表的过程。这是由SqlAlchemy的表对象和列对象完成的。我们可以使用各种字段类型,如String,Integer等等。在这里,我们创建一个名为users的表,然后传给了metadata对象。然后我们创建了4个字段,id设置为主键,当我们向这个表中增加用户呢时,SqlAlchemy 会自动将id加一(自增)。name字段设置为String类型,40个字符长度。age字段是简单的Integer类型,password字段也被设置为String类型,而且我们没有设置长度。addresses_table与users表的主要不同就是我们设置了外键属性用来联系两张表。

最后一个片段实际上创建了数据库和表。每当你调用create_all()时,在创建表之前会检查表是否存在。也就是说,你可以创建额外的表,但当你调用create_all时SqlAlchemy

仅仅会创建新的表。

Tips:

SqlAlchemy 也提供了装载已经创建的表的方法:

someTable = Table("users", metadata, autoload=True, schema="schemaName")

插入数据:

有几种不同的方式插入数据和查询数据。我们先考虑低级的方式,然后再考虑这个系列的其它部分,我们将进入稍微抽象的Sessions和Declarative样式。

让我们一起看看插入数据的几种不同方法吧。

复制代码
# create an Insert object
ins = users_table.insert()
# add values to the Insert object
new_user = ins.values(name="Joe", age=20, password="pass")
 
# create a database connection
conn = engine.connect()
# add user to database by executing SQL
conn.execute(new_user)
复制代码

上面的代码展示了如何利用连接对象插入数据的方式。首先,你需要调用表的insert()方法创建一个Insert对象,然后你就可以用Insert的values()方法增加一行你所需要的数据

。然后我们创建了Connection对象,最后对Insert对象调用Connection对象的execute方法。这听起来有点复杂,其实很简单。

 检验一下吧:我是用sqlite.exe打开tutorial.db

我们发现,插入成功了,而且id字段自动设为1,符合我们定义的刚才对primary_key的解释。

 

下面的片段展示了一些没有用Connection对象的插入数据方法:

复制代码
# a connectionless way to Insert a user
ins = users_table.insert()
result = engine.execute(ins, name="Shinji", age=15, password="nihongo")
 
# another connectionless Insert
result = users_table.insert().execute(name="Martha", age=45, password="dingbat")
复制代码

我们检验一下成功了没有?

有没有发现id的确是自增的?

在上面的两个列子中,你都需要调用表对象的insert方法。在插入方法的最后,我们看一下如何插入多行数据。

conn.execute(users_table.insert(), [
    {"name": "Ted", "age":10, "password":"dink"},
    {"name": "Asahina", "age":25, "password":"nippon"},
    {"name": "Evan", "age":40, "password":"macaca"}
])

这已经相当明白了,要点就是你需要先前创建的Connection对象,并传递两个参数。

效果如下:

 

现在,我们来看看查询操作。

SqlAlchemy为查询操作提供了一组方法。这里,我们将关注简单的方法。

最常见的例子就是做一个全查询,我们开始吧

from sqlalchemy.sql import select
s = select([users_table])
result = s.execute()
for row in result:
    print row

结果如下:

 

首先我们导入select方法,然后我们把表作为一个元素的列表传入,最后我们调用select对象的execute方法,并把结果赋给了result变量,最后就是迭代了。

如果你需要所有的结果存储在一个由元组组成的列表而不是行对象,你可以这么做。

# get all the results in a list of tuples
conn = engine.connect()
res = conn.execute(s)
rows = res.fetchall()

结果如下:

 

如果你只需要第一条记录返回,你可以用fetchone()代替fetchall():

res = conn.execute(s)
row = res.fetchone()

现在假设我们需要更小粒度的结果,下面,我们仅仅想返回name和age,而不要密码。

s = select([users_table.c.name, users_table.c.age])
result = conn.execute(s)
for row in result:
    print row

结果如下:

 

很好,这是相当的简单。我们所需要做的只是在select语句中明确列名。那个'c'基本意思是:column.

如果你有多个表,也许select语句应该有点像这样

select([tableOne, tableTwo])

当然这很可能返回重复的结果,因此你为了解决这个问题,你将这么做:

s = select([tableOne, tableTwo], tableOne.c.id==tableTwo.c.user_id)

SqlAlchemy文档中,称第一种结果集为笛卡尔积。上诉第二种语句消除了那些烦恼。怎么消除的?在这种查询的方式中使用了where子句是一种解决办法。在下面部分,我将用sessions展示一种与where查询子句不同的方法。

下面是一些示列,注释中有解释

复制代码
from sqlalchemy.sql import and_
# The following is the equivalent to 
# SELECT * FROM users WHERE id > 3
s = select([users_table], users_table.c.id > 3)
# You can use the "and_" module to AND multiple fields together
s = select(and_(users_table.c.name=="Martha", users_table.c.age < 25))
复制代码

 

 

--------------------------第二部分--------------------------

在Step-by-Step SqlAlchemy Tutorial的第一部分(点击打开链接),我们调用SqlAlchemy的SQL表达式与数据库交互。在我们开始更高级和更加抽象的方法之前,我们需要学习更加抽象的方式做

事情。这就像许多数学课程一样,比如微积分,在你知道捷径之前,你需要很长时间去学习发现一些微积分的标准偏差。

在第二部分,我们将用简单的方法去应用SqlAlchemy。它被称为‘关系对象’方法,SqlAlchemy的官方文档实际上也从这里开始。

适应数据映射:

这为什么叫数据映射呢?因为我们将把数据库的数据映射到Python的类。让我们开始吧!

复制代码
from sqlalchemy import create_engine
from sqlalchemy import Column, MetaData, Table
from sqlalchemy import Integer, String, ForeignKey
from sqlalchemy.orm import mapper, sessionmaker
 
####################################################
class User(object):
    """"""
 
    #----------------------------------------------------------------------
    def __init__(self, name, fullname, password):
        """Constructor"""
        self.name = name
        self.fullname = fullname
        self.password = password
 
    def __repr__(self):
        return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
 
# create a connection to a sqlite database
# turn echo on to see the auto-generated SQL
engine = create_engine("sqlite:///tutorial.db", echo=True)
 
# this is used to keep track of tables and their attributes
metadata = MetaData()
users_table = Table('users', metadata,
                    Column('user_id', Integer, primary_key=True),
                    Column('name', String),
                    Column('fullname', String),
                    Column('password', String)
                    )
email_table = Table('email', metadata,
                    Column('email_id', Integer, primary_key=True),
                    Column('email_address', String),
                    Column('user_id', Integer, ForeignKey('users.user_id'))
                    )
 
# create the table and tell it to create it in the 
# database engine that is passed
metadata.create_all(engine)
 
# create a mapping between the users_table and the User class
mapper(User, users_table)
复制代码

我们注意到,与我们先前例子相比第一个不同就是User类。我们把最初的例子(见第一部分)稍微改变了一下,即现在的参数,name,full name和password。其余的部分都一样,仅仅最后多了mapper语句。这种方便的方法把User类映射到了user_table这个表。这看起来没什么大不了,但我们向数据库增加用户会变得更加简单明了。

然而在我们开始之前,我们需要讨论声明构型样式。虽然这个样式给了我们更加粒度的控制我们的表,映射和类,但大部分我们不需要那么的复杂。声明样式使得配置变得相当简单。我所知道的第一个SqlAlchemy附加的声明样式叫做Elixir.SqlAlchemy内嵌的声明样式没有Elixir那么强大,但是它很方便,因为你不需要安装额外的东西。那就让我们看看声明是怎样的与众不同吧。

复制代码
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import backref, mapper, relation, sessionmaker
 
Base = declarative_base()
 
########################################################################
class User(Base):
    """"""
    __tablename__ = "users"
 
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)
 
    #----------------------------------------------------------------------
    def __init__(self, name, fullname, password):
        """Constructor"""
        self.name = name
        self.fullname = fullname
        self.password = password
 
    def __repr__(self):
        return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
 
########################################################################
class Address(Base):
    """
    Address Class
 
    Create some class properties before initilization
    """
    __tablename__ = "addresses"
    id = Column(Integer, primary_key=True)
    email_address = Column(String, nullable=False)
    user_id = Column(Integer, ForeignKey('users.id'))
 
    # creates a bidirectional relationship
    # from Address to User it's Many-to-One
    # from User to Address it's One-to-Many
    user = relation(User, backref=backref('addresses', order_by=id))
 
    #----------------------------------------------------------------------
    def __init__(self, email_address):
        """Constructor"""
        self.email_address = email_address
 
    def __repr__(self):
        return "<Address('%s')>" % self.email_address
 
 
# create a connection to a sqlite database
# turn echo on to see the auto-generated SQL
engine = create_engine("sqlite:///tutorial.db", echo=True)
 
# get a handle on the table object
users_table = User.__table__
# get a handle on the metadata
metadata = Base.metadata
metadata.create_all(engine)
复制代码

如上所示,几乎所有的都在类中创建了。我们创建了类属性(就像类的全局变量)用来标识表的列。然后创建了初始化函数__init__,和上例差不多。当然,类继承的是declarative_base ,而不是基本的object。如果需要一个表的对象,我们需要调用魔力方法User.__table__。为了获得元数据,我们需要调用基类的Base.metadata.现在我们所关心的都解决了。

这里需要提一点的是,还记得在Step-by-Step SqlAlchemy Tutorial (part 1 of 2)中我在解释metadata = MetaData(bind=engine)时说过,“也可以在上面代码的最后即 create_all 时绑定",这一次是不是在create_all时绑定的。

下面我们看看如何向表中插入数据。

 

 

Class is now in Session

利用对象关系方法之美在于可以用一小段简短的代码与数据库交互。让我们看看如何创建一行。

mike_user = User("mike", "Mike Driscoll", "password")
print "User name: %s, fullname: %s, password: %s" % (mike_user.name,
                                                     mike_user.fullname,
                                                     mike_user.password)

如上所示,我们用User类创建一个用户,我么可以使用.访问属性。你甚至还可以用来更新数据。例如,如果你需要改变用户对象,你可以这么做:

# this is how you would change the name field
mike_user.fullname = "Mike Dryskull"

当然上面所示的并不会向表中插入一行数据。为此我们需要一个Session对象才能完成插入数据。下面我们就开始Session的基本使用吧!

复制代码
from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()
 
mike_user = User("mike", "Mike Driscoll", "password")
session.add(mike_user)
复制代码

我们在这里停一下,解释上面到底发生了什么?

首先我们需要导入sessionmaker,然后把它绑定到engine.然后我们创建一个session实例,然后我们实例化一个user对象,并把它传给session的add方法。

到此,没有任何的SQL代码被运行,这个事物也是被挂起的。

这时我们查看一下数据库:

我们发现没有数据,为了保留这一行数据,我们需要调用session.commit()方法提交事物。

session.commit()

我们再查看一下:

 

如果你需要增加多个用户,你可以这么做:

session.add_all([
     User('Mary', 'Mary Wonka', 'foobar'),
     User('Sue', 'Sue Lawhead', 'xxg527'),
     User('Fay', 'Fay Ray', 'blah')])

如果在你提交事物后碰巧改变了其中一个用户的属性,你可以使用session.dirty去校验那个是被修改过的。如果你仅仅想知道有哪些行处在挂起中,你可以调用session.new.最后我们可以使用session.rollback()去回滚一个事物。

下面让我们看一下一些查询示例:

复制代码
# do a Select all
all_users = session.query(User).all()
 
# Select just one user by the name of "mike"
our_user = session.query(User).filter_by(name='mike').first()
print our_user
 
# select users that match "Mary" or "Fay"
users = session.query(User).filter(User.name.in_(['Mary', 'Fay'])).all()
print users
 
# select all and print out all the results sorted by id
for instance in session.query(User).order_by(User.id):
    print instance.name, instance.fullname
复制代码

下面我们将讨论joins话题

Join in the Fun

joins的SQL表达式语法这里就不说了,当然我们将利用对象关系方法来示例。如果你回头看看我们创建表的示例,你将注意到我们已经用外键对象来使用join了。声明格式像下面所示:

复制代码
user_id = Column(Integer, ForeignKey('users.id'))
 
# creates a bidirectional relationship
# from Address to User it's Many-to-One
# from User to Address it's One-to-Many
user = relation(User, backref=backref('addresses', order_by=id))
复制代码

我们通过创建一个新用户来看看这是怎么工作的。

prof = User("Prof", "Prof. Xavier", "fudge")
prof.addresses

由于外键和backref命令,user对象有个address属性。如果你运行上面的代码,你会发现prof.address是一个空值。让我们增加一些address吧!

prof.addresses = [Address(email_address='profx@dc.com'),
                        Address(email_address='xavier@yahoo.com')]

看,这是多么的简单啊?同样也很简单从中获取数据。例如,如果你想取出第一个地址,你可以这样访问:prof.addresses[0]
假如现在你需要修改地址,这是易如反掌。

# change the first address
prof.addresses[0].email_address = "profx@marvel.com"

现在,让我们来做一些join查询:

for u, a in session.query(User, Address).filter(User.id==Address.user_id).filter(Address.email_address=='xavier@yahoo.com').all():
    print u, a

这是一个相当长的查询!我发现这对我来说比较困难,所以我经常这么做:

复制代码
sql = session.query(User, Address)
sql = sql.filter(User.id==Address.user_id)
sql = sql.filter(Address.email_address=='xavier@yahoo.com')
 
for u, a in sql.all():
    print u, a
复制代码

如果你喜欢一行式的方式,第一个示例并没有什么不妥,两种方法产生相同的结果集。

 

我很幸运的发现更高版本的调试更加简单。最后,我还可以用一下真正的join:

from sqlalchemy.orm import join
session.query(User).select_from(join(User, Address)).filter(Address.email_address=='xavier@yahoo.com').all()

这和上面两个示例做的是一样的事,但更加的明确。

docker配置国内镜像源 【代码】docker配置国内镜像源。 阅读详情

相关推荐

LTO编译器优化介绍以及开启方法

LTO优化的详细介绍

性感的小君君 4922

安装flask时报错:The C extension could not be compiled, speedups are not enabled.Plain-Python installation

*背景故事: 在win7电脑上,使用pip install flask 的时候,发现安装依赖文件MarkupSafe-1.0的时候,无法安装。 于是就下载MarkupSafe-1.0文件,使用文件包编译之后再安装的方式,于是就遇到的如下报错:* WARNING: The C extension could not be compiled, speedups are not enabled. ...

Alien-Hu 1887

别再盲调PID了!手把手教你用VOFA+实时可视化电机速度曲线(附STM32F4源码)

本文详细介绍了如何使用VOFA+工具实现PID参数的可视化调试,帮助开发者从盲调转向精准调优。通过实时可视化电机速度曲线,结合STM32F4源码示例,展示了如何高效调试Kp、Ki、Kd参数,解决响应慢、超调等常见问题,大幅提升电机控制系统的性能。

weixin_28366475的博客 126

Python操作Mysql之SQLAlchemy(ORM)

目录一、Python 操作 MySQL常见方式二、Flask-SQLAlchemy 扩展1、一个最小应用二、一对多(one-to-many)关系:ForeignKey用 Python 操作 MySQL很多种方式,比如:mysql-connecto、MySQLdb、mysqlclient、PyMySQL、peewee 和 SQLAIchemy 等,其中 mysql-connector是 MySQL 官方提供的驱动器,用来给后端语言,比如 Python 提供连接,这种基本就是写SQL语句的方式 ,简单的场景可以

rs勿忘初心的博客 2915

Endnote 导入参考文献的时候,格式错误太多了。et.al错误,国标GBT7714在endnote中的详细配置教程,适用于本科,硕士论文文献插入的模板

EndNote插入文献常遇到以下错误主要如下: 等、et al不分; 英文作者全名大写; 期刊名字使用了缩写(图片里没有体现;卷号、期号缺失时出现乱码,多了半个括号;页码范围略去了相同部分;没有悬挂缩进,本文全部解决,全网最细

sakura的博客 3万+

CTP-API开发系列之三:柜台系统简介

综合交易平台(Comprehensive Transaction Platform,CTP)是专门为期货公司开发的一套期货经纪业务管理系统,由交易、风险控制和结算三大系统组成。接下来分享的内容,对于期货公司的负责交易、运维同事会比较熟悉,针对CTP-API接口对接的朋友可以了解一下,在接口之上的系统是怎样的。

码上助君的专栏 6194

ORM框架sqlalchemy介绍及基本操作

前言 我们在学习mysql数据库中,很多字段都得重复操作,一个一个的打,例如select之类操作,也就表名跟字段还有where后的条件有区别,其他都大体一样,那么有没有专业的组件直接帮我们把原生sql封装好了,就意味着我们不用写sql语句,依然可以操作数据库,并以你喜欢的方式操作? ORM介绍 ORM就是对象映射关系程序,相当于把数据库也实例化了,这样我们在编程语言操作数据库时候,可以直接用编程语言对象模型进行操作,而不用sql语言 优点:最直接的优点当然是我们不用像之前一样一个一个的打出来,使我们的数据库

WOSHIBEIZHE的博客 810

Kali Linux下Havoc框架编译避坑指南:从环境配置到成功运行的全流程

本文提供了在Kali Linux系统上成功编译和运行Havoc开源框架的详细指南。文章重点解析了从Go语言环境配置、系统依赖库安装到交叉编译环境搭建的全流程,并针对编译过程中常见的Qt、Boost及mingw-w64等依赖问题给出了具体的解决方案,帮助安全研究人员绕过常见陷阱,顺利完成环境部署。

weixin_29230865的博客 94

SQLAlchemy创建MySQL引擎_引擎配置 — SQLAlchemy 1.4 Documentation

case_sensitive¶ -- 如果为false,则结果列名称将以不区分大小写的方式匹配,即, row['SomeColumn'] . .. 已弃用::1.4 create_engine.case_sensitive 参数已弃用,将在将来的版本中删除。应用程序应该以区分大小写的方式处理结果列名。connect_args¶ -- 将直接传递给DBAPI的选项字典。 connect() 方法作...

weixin_30366015的博客 850

手把手教你用C#和LibUsbDotNet实现USB设备通信(含完整代码示例)

本文详细介绍了如何使用C#和LibUsbDotNet库实现USB设备通信,包括设备识别、连接建立、同步/异步数据读写等核心操作。通过完整的代码示例,开发者可以快速掌握USB通信的关键技术,适用于工业自动化、医疗设备等多种场景。重点讲解了数据读写优化和错误处理技巧,帮助提升通信效率和可靠性。

a3b4c5的博客 703

ERROR: Ignored the following yanked versions: 0.8.3, 0.10.19.dev18 的解决办法

关于这个问题,博主是在进行项目中的python依赖包安装的时候遇见的,遇到的异常:关于这个问题,是在。

Spring Boot-Common On With You 642

python SQLAlchemy ORM——从零开始学习 01 安装库

通过create_engine接口创建engine,根据翻译可以翻译成引擎,和发动机一样,有了这个才能驱动数据库启动,但创建engine的接口接受的是一个针对 PostgreSQL的对象,对象的示例如:postgresql+psycopg2://scott:tiger@localhost:5432/mydatabase。第二个使用到的是primary_key,即数据库的主键(数据库中数值唯一的一种属性,一般是数据库自动添加的,例如作为整形id,如果主键为TURE,则id这个属性的数值不会重复)

weixin_55010563的博客 623

AutoJs调用DeepSeek大模型接口实战教程 AutoJs接入DeepSeek、 DeepSeek API调用 、 手机脚本接入大模型

通过这篇文章,我们用 AutoJs 成功接入了 DeepSeek Chat API。使用发送请求在 Header 里正确携带 API Key从里拿到最终返回结果这样一来,你就可以在 AutoJs 里实现一个智能助手脚本,甚至做更复杂的 AI 自动化工具。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 465

Python基础学习第十课:SQLAlchemy ORM与Flask部署

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db' # SQLite数据库路径。app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 关闭修改跟踪(提升性能)alias /path/to/your/app/static;app.config.from_object(config_class) # 加载配置。with app.app_context(): # Flask应用上下文。

2502_92884473的博客 489

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ORM框架SQLAlchemy使用学习

参考源:http://blog.youkuaiyun.com/fgf00/article/details/52949973 一、ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句。如果进行复杂的查询,那sql语句就要进行一点一点拼接,而且不太有重用性,扩展不方便。而且写的sql语句可能不高效,导致程序运行也变慢。 为了避免把sql语句写死在代码里,有没有一种方法直接把原生s...

weixin_30393907的博客 1579

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

sqlalchemy ORM学习

1.创建表格 import sqlalchemy from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String engine = create_engi...

weixin_30569001的博客 122

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ORM框架SQLAlchemy学习笔记

ORM框架SQLAlchemy 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查、反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 1、安装 pip3 install sqlalchemy 2、架构与流...

weixin_30819163的博客 149

ORM框架SQLAlchemy学习

一、基本介绍   以下介绍来自维基百科,自由的百科全书。   SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。   SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽...

weixin_30555515的博客 143

Python学习笔记八:ORM框架SQLAlchemy

一:SQLAlchemy使用 1:实体类的创建 ORM中的实体类与一般的Python类不同,在其中,使用 __tablename__=""指明该类与数据库中某个表相对应,然后定义一系列成员属性,属性值使用 Column(数据类型)来映射到表中具体哪一列。 首先,创建数据库引擎,并由静态方法获取一个基类:declarative_base() 创建了一个 BaseModel 类,这个...

a631278993的博客 156

flask学习之sqlAlchemy_orm之聚合函数

聚合函数共分为: func.count:统计行的数量。 func.avg:求平均值。 func.max:求最大值。 func.min:求最小值。 func.sum:求和。 在程序的最后会进行相关的演示 中间需要的操作还有如下几部分: 1.生成表格 2.批量用随机数填充内容到表格 3.计算聚合函数值 1.生成表格: engine = create_engine(DB_URL) # 都要继承这个函数生成的基类 Base = declarative_base(engine) class User(Base)

LCY133的博客 2227

SQL学习笔记八之ORM框架SQLAlchemy

阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查、反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 1、安装 pip3 in...

dengxiangbao3167的博客 191

sqlalchemy ORM reflection反射学习笔记

把数据库模式反射到ORM风格的类中,可以使用SQLAlchemy扩展模块中的automap(自动映射) 为了反射数据库,需要使用automap_base。 from sqlalchemy import create_engine, select from sqlalchemy.ext.automap import automap_base from sqlalchemy.orm import Session # 使用automap_base()创建一个Base对象 Base = automap_b

LelemamaAnne的博客 999

python(十二)下:ORM框架SQLAlchemy使用学习

本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业   一、ORM介绍如果写程序用pymysql和程序交互,那是不是要写原生sql语句。如果进行复杂的查询,那sql语句就要进行一点一点拼接,而且不太有重用性,扩展不方便。而且写的sql语句可能不高效,导致程序运行也变慢。 为了避免把sql语句写死在代码里,有没有一种方法直接把原生s

人生就是一场修行 2万+

SQLAlchemy 学习笔记(二):ORM 基础

照例先看层次图 一、声明映射关系 使用 ORM 时,我们首先需要定义要操作的表(通过Table),然后再定义该表对应的 Python class,并声明两者之间的映射关系(通过Mapper)。 方便起见,SQLAlchemy 提供了 Declarative 系统来一次完成上述三个步骤,Declarative 系统提供 base class,这个 base class 会为继承了它的 Py...

Ch3nnn的博客 645

Python库学习(十四):ORM框架-SQLAlchemy

SQLAlchemy是一个用于Python的SQL工具和对象关系映射ORM)库。它允许开发者通过Python代码而不是SQL查询语言来操作数据库。SQLAlchemy提供了一种灵活且强大的方式来与关系型数据库交互,支持多种数据库后端,如等。本文使用的SQLAlchemy版本: 1.4.51# 模型父类# 用户模型和表一一对应__table_args__ = {'comment': '用户表'}id = Column(BIGINT, primary_key=True, comment='主键')

很多时候犯错都是在不知情的情况下发生的 1248
上一篇: 成功法则!
下一篇: 动态SQL
Footloose_
博客等级 码龄10年 254粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值