sql怎样与python联系_【Python】SQLAlchemy的数据对象实例能否转为一个简单的对象(切断与数据库会话的联系)...
SQLAlchemy的ORM方式将数据库中的记录映射成了我们定义好的模型类,但是带来一个问题是,这些类对象的实例只在数据库会话(session)的生命期内有效,假如我将数据库会话关闭了,再访问数据表类的对象就会报错。
如下面这段简单的示例代码:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'USER'
id = Column(Integer, Sequence('USER_SEQ'), primary_key=True, autoincrement=True)
name = Column(String(30))
age = Column(Integer)
status = Column(String(30))
engine = create_engine(str(db_url), encoding=b'utf-8', echo=echo, convert_unicode=True)
Session = sessionmaker(bind=engine)
session = Session()
user = User(name='John', age=30)
session.add(user)
session.commit()
session.close()
print user.name
运行到最后一行会抛出异常:
Traceback (most recent call last):
File "E:\WorkCopy\test\test.py", line 21, in test_something
print user.name
File "C:\Python27\lib\site-packages\sqlalchemy\orm\attributes.py", line 237, in __get__
return self.impl.get(instance_state(instance), dict_)
File "C:\Python27\lib\site-packages\sqlalchemy\orm\attributes.py", line 573, in get
value = state._load_expired(state, passive)
File "C:\Python27\lib\site-packages\sqlalchemy\orm\state.py", line 480, in _load_expired
self.manager.deferred_scalar_loader(self, toload)
File "C:\Python27\lib\site-packages\sqlalchemy\orm\loading.py", line 610, in load_scalar_attributes
(state_str(state)))
DetachedInstanceError: Instance is not bound to a Session; attribute refresh operation cannot proceed
可能有的人会说,那你不要关闭数据库会话呀,会话关闭了对象当然就无法访问了,因为ORM需要跟踪这个对象,并缓存一些你对它的操作以便在需要时更新到数据库去的,它不是一个简单的对象。
但我现在的需求是:从数据库中查询得到了一个对象实例之后,就想让这个对象与数据库切断联系,SQLAlchemy有提供这样的方法吗?我必须定义一个具有同样成员的类然后再初始化它?
回答
后记:貌似 session.expunge() 就是做这个的。
user = User(name='John', age=30)
session.add(user)
session.commit()
session.refresh(user)
session.expunge(user)
session.close()
print user.name
使用 session.refresh(user) 是为了读取自增字段值(如果有的话)到 user 对象。
try:
session.add(app)
session.commit()
session.close()
return user.name
except:
return None
finally:
session.close
执行user.name时,会查询一次数据库,所以不能在这之前关掉session
sql怎样与python联系_【Python】SQLAlchemy的数据对象实例能否转为一个简单的对象(切断与数据库会话的联系)...相关推荐
- mysql python插件_基于SQLAlchemy连接mysql库(pymsql插件)
# -*- coding:UTF -8-*-import osimport pandas as pd# 检查是否有pymysql这个包存在import pymysql# SQLAlchemy本身无法操 ...
- python数据模型_#PYTHON#数据模型 | 学步园
今天,谈谈python中的数据模型,当然你可以不了解这些东西,照样可以写出漂亮的python代码,但是"知其然知其所以然"是我的作风,总是不明白python的一些机制,心里很不爽. ...
- 初识python 视频_#python day02 初识python 学习视频来源于 太白金星
#python day02 初识python 学习视频来源于 太白金星 ''' 知识点:安装PyCharm''' # 设置鼠标条件字体大小:file ->settings # 搜索mouse E ...
- python源码编译 带tkinter_python通过Tkinter库实现的一个简单的文本编辑器源码
下边资料是关于python通过Tkinter库实现的一个简单的文本编辑器的内容. from tkSimpleDialog import askstring from tkFileDialog impo ...
- 《Python Cookbook 3rd》笔记(2.19):实现一个简单的递归下降分析器
实现一个简单的递归下降分析器 问题 你想根据一组语法规则解析文本并执行命令,或者构造一个代表输入的抽象语法树.如果语法非常简单,你可以自己写这个解析器,而不是使用一些框架. 解法 在这个问题中,我们集 ...
- python运行不了程序代码_Python源码分析2 - 一个简单的Python程序的执行
本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构. 要执行Python程序如下,功能非常简单:从1加到10再打印出来 # test program sum ...
- python json操作_Python读取JSON数据操作实例解析
读写 JSON 数据 问题 你想读写 JSON(JavaScript Object Notation) 编码格式的数据. 解决方案 json模块提供给了一种很简单的方式来编码和解码json数据,其中两 ...
- ios php mysql实例_如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1
原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个i ...
- 数据库和python有关系吗_想问一下,数据跟代码种类有关系么? 比如我用MySQL数据库,必须要用python或者JAVA之类的要求...
你可以访问python数据库接口及api查看详细的支持数据库列表.不同的数据库你需要下载不同的db api模块,例如你需要访问oracle数据库和mysql数据,你需要下载oracle和mysql数据 ...
- 黑马程序员python笔记_#华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库...
[小宅按]在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题.Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化. ...
最新文章
- 把握每天的第一个钟头
- 简单介绍Lua中的变量与赋值方法
- 腾讯张正友:计算机视觉的三生三世
- BCH综述:数以百万计的商人,更多的代币和冲突的愿景
- python学习 day2 (3月2日)
- ./configure: error: the HTTP rewrite module requires the PCRE library
- 初步学习Linux文件基本属性和Cygwin STATUS_ACCESS_VIOLATION 错误
- CVPR 2015 papers
- 1.10 比较两个数组是否相等(equals())
- ZedGraph怎样在生成曲线时随机生成不一样的颜色
- 如何用Linux写c程序并编译运行
- boost::contract模块实现access的测试程序
- html div百分比计算,css计算元素百分比大小
- html隐藏并失效,如果元素开始隐藏,css过渡将不起作用
- Linux关闭开启防火墙命令
- enum python_python 枚举Enum
- 【ANT】输入中文格式为乱码
- c语言中函数的递归调用,用C语言函数调用与递归解决问题
- 将ppt里的图片高分辨率保存的方法
- PHP根据经纬度计算距离
热门文章
- matlab 球体的绘制 柱面坐标系法 球面坐标系法
- Opencv之threshold
- 2011-7-3北京李庄儿童医院看病记
- Linux修改open files数及ulimit和file-max的区别
- FBEC2020 | 贾瑶琪:打造区块链项目最好的方式,是打造开源的系统
- 滴滴征战澳洲 全球“追击”优步
- 人工智能学习:CS188
- Error invoking sqlprovider method (tk.mybatis.mapper.provider.base.BaseselectProvider.dynamicSQL)解决
- div、p、span标签如何做到首行缩进两个字符
- 玩转Redis-生产环境如何导入、导出及删除大量数据