标签: sqlalchemy

在SQLAlchemy/Elixir中选择不同的列值

在我使用SQLAlchemy和Elixir编写的一个小脚本中,我需要获取特定列的所有不同值.在普通的SQL中,它只是一个简单的问题

SELECT DISTINCT `column` FROM `table`;
Run Code Online (Sandbox Code Playgroud)

我知道我可以"手动"运行该查询,但如果可以,我宁愿坚持使用SQLAlchemy声明性语法(和/或Elixir).我确信它一定是可能的,我甚至在SQLAlchemy文档中看到过这种类似的暗示,但我一直在寻找这些文档几个小时(以及Elixir的文档),我就是不能似乎真的弄清楚它将如何完成.那我错过了什么?

python sql sqlalchemy python-elixir

44
推荐指数
4
解决办法
6万
查看次数

带有常规属性的SQLAlchemy DetachedInstanceError(不是关系)

我刚开始使用SQLAlchemy并获得DetachedInstanceError,并且无法在任何地方找到相关信息.我在会话之外使用实例,所以SQLAlchemy很自然无法加载任何关系,如果它们尚未加载,但是,我访问的属性不是关系,实际上这个对象根本没有任何关系.我找到了诸如渴望加载的解决方案,但我无法应用于此,因为这不是一种关系.我甚至在关闭会话之前尝试"触摸"此属性,但它仍然无法阻止异常.即使在非关系属性之前成功访问过一次之后,可能导致此异常的原因是什么?任何有关调试此问题的帮助表示赞赏.我将同时尝试获得可重现的独立场景并在此更新.

更新:这是具有几个堆栈的实际异常消息:

  File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/attributes.py", line 159, in __get__
    return self.impl.get(instance_state(instance), instance_dict(instance))
  File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/attributes.py", line 377, in get
    value = callable_(passive=passive)
  File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/state.py", line 280, in __call__
    self.manager.deferred_scalar_loader(self, toload)
  File "/home/hari/bin/lib/python2.6/site-packages/SQLAlchemy-0.6.1-py2.6.egg/sqlalchemy/orm/mapper.py", line 2323, in _load_scalar_attributes
    (state_str(state)))
DetachedInstanceError: Instance <ReportingJob at 0xa41cd8c> is not bound to a Session; attribute refresh operation cannot proceed
Run Code Online (Sandbox Code Playgroud)

部分模型如下所示:

metadata = MetaData()
ModelBase = declarative_base(metadata=metadata)

class ReportingJob(ModelBase):
    __tablename__ = 'reporting_job'

    job_id         = Column(BigInteger, Sequence('job_id_sequence'), primary_key=True)
    client_id      = Column(BigInteger, nullable=True)
Run Code Online (Sandbox Code Playgroud)

并且字段client_id是导致此异常的原因,其用法如下所示:

查询:

    jobs = session \
            .query(ReportingJob) \ …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

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

Sqlalchemy删除子查询

我试图使用筛选查询删除一些子行而没有结果:

sl = DBSession.query(Puesto.id).filter(Puesto.locales_id == id).subquery()
DBSession.query(Servicio).filter(Servicio.puestos_id.in_(sl)).delete()
Run Code Online (Sandbox Code Playgroud)

我收到InvalidRequestError: Could not evaluate current criteria in Python. Specify 'fetch' or False for the synchronize_session parameter.了错误.

完整堆栈跟踪:

Traceback (most recent call last):
  File "/usr/src/tg2env/ceaf/ceaf/controllers/root.py", line 1673, in delete_local
    DBSession.query(Servicio).filter(Servicio.puestos_id.in_(sl)).delete()
  File "/usr/src/tg2env/lib/python2.4/site-packages/SQLAlchemy-0.6.6-py2.4.egg/sqlalchemy/orm/query.py", line 2126, in delete
    raise sa_exc.InvalidRequestError(
InvalidRequestError: Could not evaluate current criteria in Python.  Specify 'fetch' or False for the synchronize_session parameter.
Run Code Online (Sandbox Code Playgroud)

我无法找到问题所在......

任何的想法?

问候

python sqlalchemy

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

如何使用SQLAlchemy使用SELECT COUNT(*)计算行数?

我想知道是否可以SELECT COUNT(*) FROM TABLE在SQLAlchemy中生成一个语句,而无需明确要求它execute().如果我使用:

session.query(table).count()

然后它产生类似的东西:

SELECT count(*) AS count_1 FROM
    (SELECT table.col1 as col1, table.col2 as col2, ... from table)
Run Code Online (Sandbox Code Playgroud)

使用InnoDB在MySQL中显着变慢.我正在寻找一个不需要表具有已知主键的解决方案,如使用SQLAlchemy获取表中的行数所示.

python sql sqlalchemy

44
推荐指数
5
解决办法
7万
查看次数

如何让Tornado中的SQLAlchemy异步?

如何使SQLAlchemyTornadoasync?我在async mongo示例中找到了MongoDB的示例,但我找不到类似motor的内容SQLAlchemy.有没有人知道如何SQLAlchemy执行查询tornado.gen(我在MySQL下面使用SQLAlchemy,目前我的处理程序从数据库读取并返回结果,我想使这个异步).

python sqlalchemy tornado python-2.7

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

read_sql_query() 使用 SQLAlchemy 2.0.0 抛出“'OptionEngine'对象没有属性'execute'”

首先,我是开发界的一个全新的人,我目前正在学习人工智能/数据科学课程,我的工作之一是使用 SQL 数据库使用 Prophet 进行预测,然后使用这些预测进行预测PowerBI 但目前,我被 Python 代码困住了,我最初不是开发人员,所以我不知道问题出在哪里:

import sqlalchemy
from sqlalchemy import create_engine
import pandas as pd
from prophet import Prophet
import pymysql


engine = create_engine("mysql+pymysql://root:Password@localhost:3306/data")
query = "SELECT Cle_Produit, Date_Facturation, SUM(Quantite) AS Total_Quantite FROM ventes GROUP BY         Cle_Produit, Date_Facturation"
df = pd.read_sql_query(query, engine)

df = df.pivot(index='Date_Facturation', columns='Cle_Produit', values='Total_Quantite')
df = df.reset_index()
df.rename(columns={'Date_Facturation': 'ds', 'Total_Quantite': 'y'}, inplace=True)


m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)

forecast[['ds', 'yhat']].to_csv('forecast.csv', index=False)
Run Code Online (Sandbox Code Playgroud)

它返回给我这条消息:

导入失败。交互式情节将不起作用。回溯(最近一次调用最后一次):文件“f:\Backup\Cours\Cours\Explo Data\app3.py”,第 9 行,在 df = pd.read_sql_query(query, engine) …

python sqlalchemy pandas

44
推荐指数
3
解决办法
4万
查看次数

在SQLAlchemy中选择NULL值

这是我的(PostgreSQL)表 -

test=> create table people (name varchar primary key,
                            marriage_status varchar) ; 

test=> insert into people values ('Ken', 'married');
test=> insert into people values ('May', 'single');
test=> insert into people values ('Joe', NULL);
Run Code Online (Sandbox Code Playgroud)

我想选择被所有的人知道要结婚了,即包括那些NULL marriage_status.

这并不能正常工作-

test=> select * from people where marriage_status != 'married' ; 
 name | marriage_status 
------+-----------------
 May  | single
(1 row)
Run Code Online (Sandbox Code Playgroud)

当然这样做 -

test=> select * from people where marriage_status != 'married'
       or marriage_status is NULL ; 
 name | marriage_status 
------+----------------- …
Run Code Online (Sandbox Code Playgroud)

python sql database sqlalchemy

43
推荐指数
4
解决办法
5万
查看次数

Flask SQLAlchemy显示调试查询

我正在开发一个带烧瓶和SQL Alchemy的应用程序.我需要显示执行的查询以生成一个页面以及每个查询调试所用的时间

最好的方法是什么?

sqlalchemy flask

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

flask sqlalchemy查询不等于的列

我可以在座位表中查询没有分配邀请的所有座位:

seats = Seat.query.filter_by(invite=None).all()
Run Code Online (Sandbox Code Playgroud)

但是,当查询所有分配了邀请的座位时,我得到一个错误:

seats = Seat.query.filter_by(invite!=None).all()
Run Code Online (Sandbox Code Playgroud)

这是我的Seat类:

NameError: name 'invite' is not defined
Run Code Online (Sandbox Code Playgroud)

如何查询所有者不为空的所有座位?

谢谢

python sqlalchemy flask flask-sqlalchemy

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

使用pyODBC的fast_executemany加速pandas.DataFrame.to_sql

我想发送一个大型pandas.DataFrame到运行MS SQL的远程服务器.我现在的方法是将data_frame对象转换为元组列表,然后使用pyODBC的executemany()函数将其发送出去.它是这样的:

 import pyodbc as pdb

 list_of_tuples = convert_df(data_frame)

 connection = pdb.connect(cnxn_str)

 cursor = connection.cursor()
 cursor.fast_executemany = True
 cursor.executemany(sql_statement, list_of_tuples)
 connection.commit()

 cursor.close()
 connection.close()
Run Code Online (Sandbox Code Playgroud)

然后我开始怀疑使用data_frame.to_sql()方法是否可以加速(或至少更具可读性).我想出了以下解决方案:

 import sqlalchemy as sa

 engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % cnxn_str)
 data_frame.to_sql(table_name, engine, index=False)
Run Code Online (Sandbox Code Playgroud)

现在代码更具可读性,但上传速度至少慢150倍 ......

有没有办法fast_executemany在使用SQLAlchemy时翻转?

我正在使用pandas-0.20.3,pyODBC-4.0.21和sqlalchemy-1.1.13.

python sqlalchemy pyodbc pandas-to-sql

43
推荐指数
7
解决办法
3万
查看次数