SQLAlchemy 1.3.9 发布了。SQLAlchemy 是一个 Python 的 SQL
工具包以及数据库对象映射(ORM)框架。它包含整套企业级持久化模式,专门用于高效和高性能的数据库访问。

SQLAlchemy 1.3.8 发布了。SQLAlchemy 是一个 Python 的 SQL
工具包以及数据库对象映射(ORM)框架。它包含整套企业级持久化模式,专门用于高效和高性能的数据库访问。

教大家使用Python SqlAlchemy,pythonsqlalchemy

本文实例解析Python
SqlAlchemy的使用方法,分享给大家供大家参考,具体内容如下

1.初始化连接

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql://[email protected]/test'echo=True)
DBSession = sessionmaker(bind=engine)
session = DBSession()
ret=session.execute('desc user')
print ret
# print ret.fetchall()
print ret.first()

mysql://root:pass/test root是用户名 pass密码 test数据库
session相当于MySQLdb里面的游标
澳门葡萄京官方网站,first 相当于fetchone
echo=True 会输出所有的sql

2.创建表

from sqlalchemy import Column
from sqlalchemy.types import *
from sqlalchemy.ext.declarative import declarative_base

BaseModel = declarative_base()

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine('mysql://root:[email protected]/test')
DBSession = sessionmaker(bind=engine)


class User(BaseModel):
  __tablename__ = 'user1' # 表名
  user_name = Column(CHAR(30), primary_key=True)
  pwd = Column(VARCHAR(20), default='aaa', nullable=False)
  age = Column(SMALLINT(), server_default='12')
  accout = Column(INT())
  birthday = Column(TIMESTAMP())
  article = Column(TEXT())
  height = Column(FLOAT())


def init_db():
  '''
  初始化数据库
  :return:
  '''
  BaseModel.metadata.create_all(engine)


def drop_db():
  '''
  删除所有数据表
  :return:
  '''
  BaseModel.metadata.drop_all(engine)


drop_db()
init_db()

和django的 ORM一样
一旦表被创建了,修改User类不能改变数据库结构,只能用sql语句或删除表再创建来修改数据库结构
sqlalchemy.types里面有所有的数据字段类型,等于sql类型的大写
default参数是插入数据的时候,sqlalchemy自己处理的,server_default才是让mysql处理的

3.添加记录

user1=User(user_name='lujianxing',accout=1245678)
session.add(user1)
session.commit()

要commit才能起作用

4.更新记录
1).更新单条记录

query = session.query(User) 
user = query.get('lujianxing11')
print user.accout
user.accout='987'
session.flush()

2).更新多条记录

query = session.query(User)
query.filter(User.user_name=='lujianxing2').update({User.age: '15'})
query.filter(User.user_name=='lujianxing2').update({'age': '16'})
query.filter(User.pwd=='aaa').update({'age': '17'})

5.删除记录

query = session.query(User)
user = query.get('lujianxing11')
session.delete(user)
session.flush()

6.查询

query = session.query(User)
print query # 只显示sql语句,不会执行查询
print query[0] # 执行查询
print query.all() # 执行查询
print query.first() # 执行查询
for user in query: # 执行查询
  print user.user_name

如果字段的类型是数字型,查询出来的type也是数字型的,不是字符串
高级一点的查询:

# 筛选
user = query.get(1) # 根据主键获取
print query.filter(User.user_name == 2) # 只显示sql语句,不会执行查询
print query.filter(User.user_name == 'lujianxing').all() # 执行查询
print query.filter(User.user_name == 'lujianxing', User.accout == 1245678, User.age > 10).all() # 执行查询
print query.filter(User.user_name == 'lujianxing').filter(User.accout == 1245678).all()
print query.filter("user_name = 'lujianxing'").all() # 执行查询
print query.filter("user_name = 'lujianxing' and accout=1245678").all() # 执行查询
query2 = session.query(User.user_name) # 返回的结果不是User的实例,而是元组
print query2.all() # 执行查询
print query2.offset(1).limit(1).all() # 等于 limit 1,1
# 排序
print query2.order_by(User.user_name).all() 
print query2.order_by('user_name').all() 
print query2.order_by(User.user_name.desc()).all()
print query2.order_by(User.user_name, User.accout.desc()).all()
print query2.filter("user_name = 'lujianxing' and accout=1245678").count()
# 聚合查询
print session.query(func.count('*')).select_from(User).scalar()
print session.query(func.count('1')).select_from(User).scalar()
print session.query(func.count(User.id)).scalar()
print session.query(func.count('*')).filter(User.id > 0).scalar() # filter() 中包含 User,因此不需要指定表
print session.query(func.count('*')).filter(User.name == 'a').limit(1).scalar() == 1 # 可以用 limit() 限制 count() 的返回数
print session.query(func.sum(User.id)).scalar()
print session.query(func.now()).scalar() # func 后可以跟任意函数名,只要该数据库支持
print session.query(func.current_timestamp()).scalar()
print session.query(func.md5(User.name)).filter(User.id == 1).scalar()

以上就是关于Python SqlAlchemy的使用方法介绍,希望对大家的学习有所帮助。

此版本包含了各种 bug 修复并添加了用例。特别值得一提的是,更新了对 Oracle
最大标识符长度的支持,Oracle 12.2 支持长度为 128,1.3
版本不会自动调整,但会发出警告,建议应用使用新参数
max_identifier_length 显式设置所需的标识符长度;对于 1.4 系列的 Oracle
12.2 及更高版本的服务器,该值默认为 128。

新版本包含对新的 psycopg2 “执行值”性能的修复,以适应由编译器挂钩修改的
INSERT 语句。

您可能感兴趣的文章:

  • Python的ORM框架SQLAlchemy入门教程
  • Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
  • Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
  • Python ORM框架SQLAlchemy学习笔记之关系映射实例
  • Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
  • Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
  • Python ORM框架SQLAlchemy学习笔记之数据查询实例
  • 研究Python的ORM框架中的SQLAlchemy库的映射关系
  • 编写Python脚本把sqlAlchemy对象转换成dict的教程

SqlAlchemy,pythonsqlalchemy
本文实例解析Python
SqlAlchemy的使用方法,分享给大家供大家参考,具体内容如下 1.初始化连接
from…

此版本还包括对 Python 3 驱动程序 SQLite“URI”连接的支持,在 1.3.6
版本中出现的涉及“selectinload”加载器策略的 ORM 回退也得到修复。

澳门葡萄京官方网站 1

详情查看更新说明:

orm

[orm] [bug]

  • 修复了由于内部上下文字典中的映射器/关系状态导致 Load
    对象不可拾取的错误

[orm] [usecase

  • 添加了对使用 Python pep-435 枚举对象的 Enum
    数据类型的使用的支持,作为用作 ORM 映射的主键列的值

https://www.sqlalchemy.org/blog/2019/10/04/sqlalchemy-1.3.9-released

engine

[engine] [feature]

  • 添加了新参数 create_engine.hide_parameters,当设置为 True
    时,将导致不再记录 SQL 参数,也不会在 StatementError
    对象的字符串表示形式中呈现

[engine] [bug]

  • 修复了在第一次连接时发生的方言“初始化”过程会遇到异常的问题

(文/开源中国)    

postgresql

[postgresql] [bug]

  • 修改了 1.3.7 中刚刚添加的对 psycopg2“execute_values()”
    功能支持的方法
  • 修复了由于错误的断言语句而导致 postgresql 运算符在使用
    postgresql.array 对象时无法正确运行非整数值的错误

[postgresql] [usecase]

  • 添加了对 CHECK 约束的反射的支持,其中包括特殊的 PostgreSQL 限定符
    “NOT VALID”,它可以存在于 CHECK
    约束中,这些约束被添加到现有表中,并且指令不会应用于表中的现有数据

sqlite

[sqlite] [bug] [reflection]

  • 修复了一个错误,即只设置“引用列”时,设置为仅按表名称引用父表而没有列名称的
    FOREIGN KEY 将无法正确反映

发布公告:
完整更新内容:
下载地址:

(文/开源中国)