SQLAlchemy flush()
和commit()
SQLAlchemy 之间有什么区别?
我已经阅读了文档,但没有更明智 - 他们似乎假设我没有预先理解.
我对它们对内存使用的影响特别感兴趣.我正在从一系列文件(总共约500万行)中将一些数据加载到数据库中,并且我的会话偶尔会崩溃 - 它是一个大型数据库和一台内存不足的机器.
我想知道我是否使用了太多但commit()
没有足够的flush()
电话 - 但是如果没有真正了解其中的差异,那就很难说了!
如何descending
在SQLAlchemy查询中使用ORDER BY ,如下所示?
此查询有效,但按升序返回:
query = (model.Session.query(model.Entry)
.join(model.ClassificationItem)
.join(model.EnumerationValue)
.filter_by(id=c.row.id)
.order_by(model.Entry.amount) # This row :)
)
Run Code Online (Sandbox Code Playgroud)
如果我尝试:
.order_by(desc(model.Entry.amount))
Run Code Online (Sandbox Code Playgroud)
然后我得到:NameError: global name 'desc' is not defined
.
任何人都可以解释SQLAlchemy 之间的区别filter
和filter_by
功能吗?我很困惑,不能真正看到差异.我应该使用哪一个?
是否有一种简单的方法来迭代列名和值对?
我的sqlalchemy版本是0.5.6
下面是我尝试使用dict(row)的示例代码,但它抛出异常,TypeError:'User'对象不可迭代
import sqlalchemy
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
print "sqlalchemy version:",sqlalchemy.__version__
engine = create_engine('sqlite:///:memory:', echo=False)
metadata = MetaData()
users_table = Table('users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
)
metadata.create_all(engine)
class User(declarative_base()):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
def __init__(self, name):
self.name = name
Session = sessionmaker(bind=engine)
session = Session()
user1 = User("anurag")
session.add(user1)
session.commit()
# uncommenting next line throws exception 'TypeError: 'User' object is not iterable'
#print …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在sqlalchemy中执行此查询
SELECT id, name FROM user WHERE id IN (123, 456)
Run Code Online (Sandbox Code Playgroud)
我想[123, 456]
在执行时绑定列表.
如何在SQLAlchemy中执行原始SQL?
我有一个python web应用程序,它运行在烧瓶上,并通过SQLAlchemy与数据库连接.
我需要一种方法来运行原始SQL.该查询涉及多个表连接以及内联视图.
我试过了:
connection = db.session.connection()
connection.execute( <sql here> )
Run Code Online (Sandbox Code Playgroud)
但我不断收到网关错误.
Django有一些从DB到JSON格式返回的ORM模型的自动序列化.
如何将SQLAlchemy查询结果序列化为JSON格式?
我试过,jsonpickle.encode
但它编码查询对象本身.我试过了,json.dumps(items)
但它回来了
TypeError: <Product('3', 'some name', 'some desc')> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
是否真的很难将SQLAlchemy ORM对象序列化为JSON/XML?它没有默认的序列化器吗?现在序列化ORM查询结果是非常常见的任务.
我需要的只是返回SQLAlchemy查询结果的JSON或XML数据表示.
需要在javascript datagird中使用SQLAlchemy对象的JSON/XML格式的查询结果(JQGrid http://www.trirand.com/blog/)
我查看了文档,我似乎无法找到如何在SQLAlchemy中进行OR查询.我只是想做这个查询.
SELECT address FROM addressbook WHERE city='boston' AND (lastname='bulger' OR firstname='whitey')
Run Code Online (Sandbox Code Playgroud)
应该是这样的
addr = session.query(AddressBook).filter(City == "boston").filter(????)
Run Code Online (Sandbox Code Playgroud) 假设我有一个代表位置的类.地点"属于"客户.位置由unicode 10字符代码标识."位置代码"在特定客户的位置中应该是唯一的.
The two below fields in combination should be unique
customer_id = Column(Integer,ForeignKey('customers.customer_id')
location_code = Column(Unicode(10))
Run Code Online (Sandbox Code Playgroud)
因此,如果我有两个客户,客户"123"和客户"456".它们都可以有一个名为"main"的位置,但两个位置都不能称为main.
我可以在业务逻辑中处理这个问题,但我想确保无法在sqlalchemy中轻松添加需求.unique = True选项似乎仅在应用于特定字段时才起作用,并且会导致整个表只有所有位置的唯一代码.
我想从数据库中获取一个对象(如果它已经存在)(基于提供的参数),或者如果不存在则创建它.
Django get_or_create
(或来源)这样做.SQLAlchemy中是否有等效的快捷方式?
我目前正在明确地写出这样的:
def get_or_create_instrument(session, serial_number):
instrument = session.query(Instrument).filter_by(serial_number=serial_number).first()
if instrument:
return instrument
else:
instrument = Instrument(serial_number)
session.add(instrument)
return instrument
Run Code Online (Sandbox Code Playgroud)