标签: sqlalchemy

Twisted + SQLAlchemy以及最好的方法

所以我正在编写另一个基于Twisted的守护进程.它将像往常一样有一个xmlrpc接口,因此我可以轻松地与它进行通信,并让其他进程根据需要与它交换数据.

该守护进程需要访问数据库.我们一直在使用SQL Alchemy代替我们最新项目的硬编码SQL字符串 - 这些项目主要用于Pylons中的Web应用程序.

我们想对这个应用程序做同样的事情并重新使用利用SQL Alchemy的库代码.那么该怎么办?当然,因为该库是为Pylons应用程序编写的,所以每个人都习惯使用的所有直接阻塞样式代码,所有非阻塞都由Pylons通过线程,线程本地,范围会话等神奇地处理.上.

所以现在对Twisted我想我有点卡住了.我可以:

  1. 如果它是最小的,请直接编写我需要的sql,并在我需要命中db时使用twisted中的dbapi池来执行runInteractions等.
  2. 在我们的库中使用对象和固有的阻塞方法,然后在我的Twisted守护进程中阻塞.呸.
  3. 使用2008年最后一次更新的sAsync,并重用我们已经定义的模型但不是真的,这并不能解决库代码也需要在Pylons中工作的问题.这甚至适用于最新版本的SQL Alchemy吗?谁知道.那个项目看起来很棒 - 它为什么显然被抛弃了?
  4. 生成一个单独的子进程并让它处理库代码及其所有阻塞,结果返回到我的守护进程准备好后作为通过YAML通过xmlrpc编组的对象.
  5. 使用deferToThread,然后删除返回的对象,确保执行急切的加载,以便我拥有我可能需要的所有东西.对我来说似乎有些丑陋.

我也坚持使用Python 2.5.4 atm所以还没有2.6,我不认为我可以从未来进行导入以获得那里很酷的新多处理模块的东西.虽然我认为我们已经很好地处理了进程间通信,但这没关系.

所以我倾向于选项4,因为这样可以避免与选项1的逻辑重复的致命罪,同时也避免线程.

我的第一次尝试将是选项2,只是让事情继续进行,然后将对库代码的调用分离出来,如果它看起来好像很可能需要花费太长时间才能阻塞.伤心.也许Stackless Python和Twisted的组合在这里会很有趣.

有更好的想法吗?

python sql database sqlalchemy twisted

31
推荐指数
3
解决办法
8325
查看次数

Python SqlAlchemy order_by DateTime?

我正在使用SqlAlchemy存储一些带有DateTime字段的对象:

my_date = Field(DateTime())
Run Code Online (Sandbox Code Playgroud)

我想运行一个查询来检索最近的几个对象(具有my_date字段的实体是最新的).

我尝试过以下方法:

entities = MyEntity.query.order_by(MyEntity.time).limit(3).all()
entities = MyEntity.query.order_by(-MyEntity.time).limit(3).all()
Run Code Online (Sandbox Code Playgroud)

但是这些查询以相同的顺序返回相同的对象.SqlAlchemy文档指出使用' - '来颠倒顺序,但我肯定在这里遗漏了一些东西.

有人可以帮忙吗?

python sqlalchemy

31
推荐指数
2
解决办法
3万
查看次数

将列添加到SQLAlchemy表

我使用SQLAlchemy创建了一个表,忘了添加列.我基本上想要这样做:

users.addColumn('user_id', ForeignKey('users.user_id'))
Run Code Online (Sandbox Code Playgroud)

这是什么语法?我在文档中找不到它.

python terminal sqlalchemy

31
推荐指数
6
解决办法
5万
查看次数

如何在sqlalchemy查询中选择文字值?

我有一个查询,如下所示:

query = session.query(Item) \
    .filter(Item.company_id == company_id) \
    .order_by(Item.id)
Run Code Online (Sandbox Code Playgroud)

这是一个非常基本的查询.除了拉出Item的值之外,我想在混合中添加一个额外的值,并将它返回给我.在原始SQL中,我会这样做:

SELECT *, 0 as subscribed
FROM items
WHERE company_id = 34
ORDER BY id
Run Code Online (Sandbox Code Playgroud)

如何通过sqlalchemy手动添加该值?

python sqlalchemy

31
推荐指数
2
解决办法
2万
查看次数

在Postgres/SQLAlchemy上设置application_name

看一下输出select * from pg_stat_activity;,我看到一个名为的列application_name,在这里描述.

我看到psql正确设置了这个值(到psql...),但我的应用程序代码(psycopg2/SQLAlchemy)将它留空.

我想将它设置为有用的东西,比如web.1,web.2等等,所以我可以稍后关联什么,我看到pg_stat_activity与我在我的应用程序日志中看到.

我找不到如何使用SQLAlchemy设置这个字段(如果push推进 - 即使使用原始sql;我在Heroku上使用PostgresSQL 9.1.7,如果这很重要).

我错过了一些明显的东西吗

postgresql sqlalchemy psycopg2

31
推荐指数
1
解决办法
1万
查看次数

SqlAlchemy asyncio orm:如何查询数据库

在 SqlAlchemy 异步 orm 引擎中,如何查询表并获取一个值或全部值?

我从非异步方法知道我可以这样做

SESSION.query(TableClass).get(x)

但尝试使用异步方法会引发下一个错误:

AttributeError: 'AsyncSession' object has no attribute 'query'.

这是我定义的 SESSION 变量。LOOP 变量仅asyncio.get_event_loop()用于在加载 sql 模块时启动异步方法并填充用作缓存的变量,以避免每次需要时都缓存数据库:

from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session

from .. import CONFIG, LOOP

def _build_async_db_uri(uri):
    if "+asyncpg" not in uri:
        return '+asyncpg:'.join(uri.split(":", 1))
    return uri

async def start() -> declarative_base:
    engine = create_async_engine(_build_async_db_uri(CONFIG.general.sqlalchemy_db_uri))
    async with engine.begin() as conn:
        BASE.metadata.bind = engine
        await conn.run_sync(BASE.metadata.create_all)
    return scoped_session(sessionmaker(bind=engine, autoflush=False, class_=AsyncSession))


BASE = declarative_base()
SESSION …
Run Code Online (Sandbox Code Playgroud)

sqlalchemy python-3.x python-asyncio

31
推荐指数
2
解决办法
5万
查看次数

Python在sqlalchemy中进行了解释

我想在我的sqlite数据库中加载/保存一个dict,但是在找到一个简单的方法时遇到了一些问题.我真的不需要能够根据内容进行过滤等,因此可以简单地转换为/来自字符串.

下一个最好的东西是外键.请不要发布链接到巨大的例子,如果我盯着任何那些,我的头会爆炸.

python sql sqlite sqlalchemy

30
推荐指数
3
解决办法
2万
查看次数

如何在sql炼金术过滤器中从字符串变量动态地给出列名?

我想在sql炼金术过滤器中创建查询,但是在变量/变量中指定的列是(动态的).

原始查询:

db_session.query(Notice).filter(Notice.subject.like("%" +query+ "%"))
Run Code Online (Sandbox Code Playgroud)

我想做这样的查询:

col_name='subject'
db_session.query(Notice).filter(Notice.col_name.like("%" +query+ "%"))
col_name='status'
status=0
db_session.query(Notice).filter(Notice.col_name != 1)
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

30
推荐指数
2
解决办法
2万
查看次数

如何自动填充SQLAlchemy数据库字段?(烧瓶-SQLAlchemy的)

我有一个简单的用户模型,定义如下:

# models.py
from datetime import datetime
from myapp import db

class User(db.Model):
  id = db.Column(db.Integer(), primary_key=True)
  email = db.Column(db.String(100), unique=True)
  password = db.Column(db.String(100))
  date_updated = db.Column(db.DateTime())

  def __init__(self, email, password, date_updated=None):
    self.email = email
    self.password = password
    self.date_updated = datetime.utcnow()
Run Code Online (Sandbox Code Playgroud)

当我创建一个新的User对象时,我的date_updated字段被设置为当前时间.我想做的是这样做,每当我保存对User对象的更改时,我的date_updated字段将自动设置为当前时间.

我已经搜索了文档,但对于我的生活,我似乎无法找到任何参考.我对SQLAlchemy很新,所以我真的没有任何经验可以借鉴.

会喜欢一些反馈,谢谢.

database postgresql sqlalchemy flask flask-sqlalchemy

30
推荐指数
2
解决办法
1万
查看次数

运行GAE开发服务器时,本地MySQLdb连接因para​​mstyle的AttributeError失败

我正在使用Flask-Alchemy构建一个针对Cloud SQL的GAE Flask应用程序,并在dev_appserver构建它时运行以测试应用程序.

但是,如果我将URL 设置SQLALCHEMY_DATABASE_URImysql+gaerdbms:///appname?instance=instanceidURL,则在尝试调用时会收到以下回溯db.create_all():

Traceback (most recent call last):
  # earlier lines omitted for brevity
  File "/Project/app/foo.bar/foo/bar/admin/__init__.py", line 26, in init_db
    db.create_all()
  File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 856, in create_all
    self._execute_for_all_tables(app, bind, 'create_all')
  File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 848, in _execute_for_all_tables
    op(bind=self.get_engine(app, bind), tables=tables)
  File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 797, in get_engine
    return connector.get_engine()
  File "/Project/app/distlib/flask_sqlalchemy/__init__.py", line 473, in get_engine
    self._engine = rv = sqlalchemy.create_engine(info, **options)
  File "/Project/app/distlib/sqlalchemy/engine/__init__.py", line 332, in create_engine
    return strategy.create(*args, **kwargs)
  File "/Project/app/distlib/sqlalchemy/engine/strategies.py", …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine sqlalchemy google-cloud-sql

30
推荐指数
1
解决办法
3624
查看次数