什么是我可以捕获SQLAlechmy异常的上层异常?
>>> from sqlalchemy import exc
>>> dir(exc)
['ArgumentError', 'CircularDependencyError', 'CompileError', 'ConcurrentModificationError', 'DBAPIError', 'DataError', 'DatabaseError', 'DisconnectionError', 'FlushError', 'IdentifierError', 'IntegrityError', 'InterfaceError', 'InternalError', 'InvalidRequestError', 'NoReferenceError', 'NoReferencedColumnError', 'NoReferencedTableError', 'NoSuchColumnError', 'NoSuchTableError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'SADeprecationWarning', 'SAPendingDeprecationWarning', 'SAWarning', 'SQLAlchemyError', 'SQLError', 'TimeoutError', 'UnboundExecutionError', 'UnmappedColumnError', '__builtins__', '__doc__', '__file__', '__name__', '__package__']
>>>
Run Code Online (Sandbox Code Playgroud) 我想使用声明方法和SQLAlchemy映射Tag实体.标签可以有父(另一个标签).
我有:
class Tag(Base):
__tablename__ = 'tag'
id = Column(Integer, primary_key=True)
label = Column(String)
def __init__(self, label, parentTag=None):
self.label = label
Run Code Online (Sandbox Code Playgroud)
如何添加"父母"关系?
谢谢
我是SQLAlchemy的初学者,发现查询可以用2种方法完成:
方法1:
DBSession = scoped_session(sessionmaker())
class _Base(object):
query = DBSession.query_property()
Base = declarative_base(cls=_Base)
class SomeModel(Base):
key = Column(Unicode, primary_key=True)
value = Column(Unicode)
# When querying
result = SomeModel.query.filter(...)
Run Code Online (Sandbox Code Playgroud)
方法2
DBSession = scoped_session(sessionmaker())
Base = declarative_base()
class SomeModel(Base):
key = Column(Unicode, primary_key=True)
value = Column(Unicode)
# When querying
session = DBSession()
result = session.query(SomeModel).filter(...)
Run Code Online (Sandbox Code Playgroud)
它们之间有什么区别吗?
我正在使用SQLAlchemy(查询MySQL)设计API,我想强制所有查询都有page_size(LIMIT)和page_number(OFFSET)参数.
使用SQLAlchemy是否有一种干净的方法?也许构建某种工厂来创建自定义Query对象?或者也许有一个很好的方法来使用mixin类吗?
我尝试了显而易见的事情并且它不起作用,因为.limit()和.offset()必须在应用所有过滤条件后调用:
def q(page=0, page_size=None):
q = session.query(...)
if page_size: q = q.limit(page_size)
if page: q = q.offset(page*page_size)
return q
Run Code Online (Sandbox Code Playgroud)
当我尝试使用它时,我得到了例外:
sqlalchemy.exc.InvalidRequestError: Query.filter() being called on a Query which already has LIMIT or OFFSET applied. To modify the row-limited results of a Query, call from_self() first. Otherwise, call filter() before limit() or offset() are applied.
Run Code Online (Sandbox Code Playgroud) 我正在使用带有MySQL数据库的SQLAlchemy,我想计算表中的行数(大约300k).SQLAlchemy 计数函数的运行时间大约是在MySQL中直接写入相同查询的50倍.难道我做错了什么?
# this takes over 3 seconds to return
session.query(Segment).count()
Run Code Online (Sandbox Code Playgroud)
然而:
SELECT COUNT(*) FROM segments;
+----------+
| COUNT(*) |
+----------+
| 281992 |
+----------+
1 row in set (0.07 sec)
Run Code Online (Sandbox Code Playgroud)
速度的差异随着桌子的大小而增加(在100k行下几乎不可察觉).
更新
使用session.query(Segment.id).count()而不是session.query(Segment).count()似乎做的伎俩,让它加快速度.我仍然感到困惑,为什么初始查询速度较慢.
# ! /usr/bin/env python
# -*- coding: utf-8 -*-
# login_frontend.py
""" Python 2.7.3
Cherrypy 3.2.2
PostgreSQL 9.1
psycopy2 2.4.5
SQLAlchemy 0.7.10
"""
Run Code Online (Sandbox Code Playgroud)
我在一个Python/SQLAlchemy类中连接四个表时遇到问题.我正在尝试这个,所以我可以迭代这个类的实例,而不是我从连接ORM表中得到的命名元组.
为什么这一切?因为我已经开始这样了,而且我走得太远,只是离开它.此外,它必须是可能的,所以我想知道它是如何完成的.
对于这个项目(cherrypy web-frontend),我得到了一个已经完成的包含表类的模块.我把它移到了这篇文章的底部,因为也许你甚至都不需要它.
以下只是联接多表类尝试的一个示例.我选择了一个简单的案例,其中只有两个表和一个联结表.在这里,我不会写入这些连接表,但它在其他地方是必要的.这就是为什么类可以很好地解决这个问题.
这是给定的表类模块和这两个网站的示例的组合:
- 针对多个表映射类
- SQLAlchemy:一个类 - 两个表
class JoinUserGroupPerson (Base):
persons = md.tables['persons']
users = md.tables['users']
user_groups = md.tables['user_groups']
groups = md.tables['groups']
user_group_person =(
join(persons, users, persons.c.id == users.c.id).
join(user_groups, users.c.id == user_groups.c.user_id).
join(groups, groups.c.id == user_groups.c.group_id))
__table__ = user_group_person
""" I expanded the redefinition of 'id' to three tables,
and …Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的错误,但我似乎找不到令人满意的解决方案.
运行时db.create_all(),我收到以下错误.
sqlalchemy.exc.OperationalError: (OperationalError) fe_sendauth: no password supplied None None
Run Code Online (Sandbox Code Playgroud)
我的数据库链接设置为
'postgresql://localhost/db_name'
Run Code Online (Sandbox Code Playgroud)
这在我的Mac和Heroku上工作正常,但在ubuntu(digitalocean)上不行.
我有什么想法可能做错了吗?
我需要执行这个查询::
select field11, field12
from Table_1 t1
left outer join Table_2 t2 ON t2.tbl1_id = t1.tbl1_id
where t2.tbl2_id is null
Run Code Online (Sandbox Code Playgroud)
我在python中有这些类:
class Table1(Base):
....
class Table2(Base):
table_id = Column(
Integer,
ForeignKey('Table1.id', ondelete='CASCADE'),
)
....
Run Code Online (Sandbox Code Playgroud)
我如何从下面得到上述内容?
我正在遵循flask-sqlalchemy教程,宣布关于一对多关系的模型.示例代码如下:
class Person(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
addresses = db.relationship('Address', backref='person',
lazy='dynamic')
class Address(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(50))
person_id = db.Column(db.Integer, db.ForeignKey('person.id'))
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何使用这样的模型将新记录插入到DB中.我假设我需要一个构造函数init,但我很难理解它应该如何实现和使用.我这里的主要问题是Person依赖于地址和地址有ForeignKey to Person,所以它应该提前知道Person.
Plase帮助我理解它应该如何执行.
先感谢您.
python sqlalchemy foreign-keys relationship flask-sqlalchemy
我想使用SQLAlchemy删除一个表.
由于我一遍又一遍地测试,我想删除表,my_users以便每次都可以从头开始.
到目前为止,我使用SQLAlchemy通过engine.execute()方法执行原始SQL :
sql = text('DROP TABLE IF EXISTS my_users;')
result = engine.execute(sql)
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有一些标准的方法可以这样做.我唯一能找到的是drop_all(),但它删除了所有结构,而不仅仅是一个特定的表:
Base.metadata.drop_all(engine) # all tables are deleted
Run Code Online (Sandbox Code Playgroud)
例如,给出这个非常基本的例子.它包含一个带有单个表的SQLite基础结构my_users,我在其中添加了一些内容.
from sqlalchemy import create_engine, Column, Integer, String, text
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('sqlite://', echo=False)
Base = declarative_base()
class User(Base):
__tablename__ = "my_users"
id = Column(Integer, primary_key=True)
name = Column(String)
def __init__(self, name):
self.name = name
# Create all the tables in the database which …Run Code Online (Sandbox Code Playgroud) sqlalchemy ×10
python ×8
api-design ×1
cherrypy ×1
drop-table ×1
exception ×1
foreign-keys ×1
mapping ×1
mysql ×1
orm ×1
postgresql ×1
relationship ×1
sql ×1
sqlite ×1