教大家使用Python SqlAlchemy

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

1.初始化连接

from sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerengine = create_engine('mysql://pass@localhost/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 Columnfrom sqlalchemy.types import *from sqlalchemy.ext.declarative import declarative_baseBaseModel = declarative_base()from sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerengine = create_engine('mysql://root:Hs2BitqLYKoruZJbT8SV@localhost/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.accoutuser.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的使用方法介绍,希望对大家的学习有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2535504.html

(0)
上一篇 2025年3月5日 22:58:10
下一篇 2025年2月22日 16:24:42

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python中方法链的使用方法

    方法链(method chaining)是面向对象的编程语言中的一种常见语法,可以让开发者在只引用对象一次的情况下,对同一个对象进行多次方法调用。举个例子: 假设我们有一个Foo类,其中包含有两个方法——bar和baz。 我们创建一个Foo…

    编程技术 2025年3月5日
    000
  • python开发之list操作实例分析

    本文实例分析了python开发之list操作。分享给大家供大家参考,具体如下: 对python中list的操作,大家可以参考《Python list操作用法总结》 以下是我个人的笔记: #python list”’ 创建list有很多方法…

    编程技术 2025年3月5日
    200
  • python开发之str.format()用法实例分析

    本文实例分析了python开发之str.format()用法。分享给大家供大家参考,具体如下: 格式化一个字符串的输出结果,我们在很多地方都可以看到,如:c/c++中都有见过 下面看看python中的字符串格式函数str.format():…

    编程技术 2025年3月5日
    200
  • python文件与目录操作实例详解

    本文实例分析了python文件与目录操作的方法。分享给大家供大家参考,具体如下: 关于python文件操作的详细说明,大家可以参考前一篇《python文件操作相关知识点总结整理》 官方API:os-Miscellaneous operati…

    编程技术 2025年3月5日
    200
  • python黑魔法之参数传递

    我们都听说,python世界里面,万物皆对象。怎么说万物皆对象呢?最常见的: > class A: pass> a = A() 登录后复制 我们说a是一个对象。那么既然是万物了,其实A也是对象。3 也是对象。True 也是对象。…

    编程技术 2025年3月5日
    200
  • python实现井字棋游戏

    本文实例介绍了python实现井字棋游戏的方法,分享给大家,具体内容如下 windows7下python3.4.0编译运行通过。由于采用了cmd调用,所以与Linux不兼容,无法在Linux下运行。游戏就是井字棋,小键盘上的数字位置对应棋盘…

    编程技术 2025年3月5日
    200
  • python黑魔法之编码转换

    我们在使用其他语言的库做编码转换时,对于无法理解的字符,通常的处理也只有两种(或三种): 抛异常 替换成替代字符 跳过 但是在复杂的现实世界中,由于各种不靠谱,我们处理的文本总会出现那么些不和谐因素,比如混合编码。在这种情况下,又回到了上面…

    编程技术 2025年3月5日
    200
  • 使用Python写个小监控

    1.入门 首先你得用过C/C++、java、Javascript等的一种,编程小白估计比较艰难,有一定编程经验的python小白相对简单些。 1.1 Hello World! Python安装比较简单,到官网上下载安装包,一路下一步就可以了…

    编程技术 2025年3月5日
    200
  • Python编程中对文件和存储器的读写示例

    1.文件的写入和读取 #!/usr/bin/python # -*- coding: utf-8 -*- # Filename: using_file.py # 文件是创建和读取 s = ””’我们都是木头人, 不许说话不许动!”’ …

    编程技术 2025年3月5日
    200
  • Python实例一个类背后发生了什么

    首先来看一个例子,正常情况下我们定义并且实例一个类如下 class Foo(object): def __init__(self): pass obj = Foo() # obj是通过Foo类实例化的对象 登录后复制 上述代码中,obj 是…

    编程技术 2025年3月5日
    200

发表回复

登录后才能评论