相关疑难解决方法(0)

如何从SQLAlchemy表达式获取原始的,已编译的SQL查询?

我有一个SQLAlchemy查询对象,想要获取已编译的SQL语句的文本,并绑定其所有参数(例如,没有%s或其他变量等待语句编译器或MySQLdb方言引擎等绑定).

调用str()查询会显示如下内容:

SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC
Run Code Online (Sandbox Code Playgroud)

我试过查询query._params,但它是一个空的字典.我使用这个sqlalchemy.ext.compiler.compiles装饰器的例子编写了我自己的编译器,但即使是那里的语句仍然有%s我想要的数据.

我无法弄清楚何时混入我的参数来创建查询; 在检查查询对象时,它们总是一个空字典(尽管查询执行正常,引擎在打开echo日志时将其打印出来).

我开始得到SQLAlchemy不希望我知道底层查询的消息,因为它打破了表达式API接口所有不同DB-API的一般性质.我不介意在我发现它之前是否执行了查询; 我只是想知道!

python mysql sql sqlalchemy

87
推荐指数
8
解决办法
6万
查看次数

Sqlalchemy - for循环中查询和查询之间的区别

我想问一下两者之间的区别

for row in session.Query(Model1):
    pass
Run Code Online (Sandbox Code Playgroud)

for row in session.Query(Model1).all():
    pass
Run Code Online (Sandbox Code Playgroud)

是第一个以某种方式用单个查询轰炸你的数据库的迭代器,而后者"急切地"将整个事件作为一个列表(如range(x)vs xrange(x))查询?

sqlalchemy

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

SQLAlchemy:使用ORM扫描大表?

我目前正在玩SQLAlchemy,这真的很整洁.

为了测试,我创建了一个包含我的图片存档的大表,由SHA1哈希索引(删除重复:-)).这是令人印象深刻的快...

为了好玩,我select *在生成的SQLite数据库上做了相同的操作:

session = Session()
for p in session.query(Picture):
    print(p)
Run Code Online (Sandbox Code Playgroud)

我希望看到哈希滚动,但它只是继续扫描磁盘.与此同时,内存使用率暴涨,几秒后达到1GB.这似乎来自SQLAlchemy的身份地图功能,我认为它只保留弱引用.

有人可以向我解释一下吗?我认为在写出哈希后会收集每个Picture p!?

python performance orm sqlalchemy

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

为什么通过ORM 5-8x加载SQLAlchemy对象比通过原始MySQLdb游标的行慢?

我注意到SQLAlchemy缓慢获取(和ORMing)一些数据,使用裸骨SQL获取相当快.首先,我创建了一个包含一百万条记录的数据库:

mysql> use foo
mysql> describe Foo;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | NO   | PRI | NULL    |       |
| A     | int(11) | NO   |     | NULL    |       |
| B     | int(11) | NO   |     | NULL    |       |
| C     | int(11) | NO   |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
mysql> SELECT COUNT(*) FROM Foo;
+----------+
| COUNT(*) |
+----------+
|  1000000 …
Run Code Online (Sandbox Code Playgroud)

python mysql performance orm sqlalchemy

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

SQLAlchemy和分页

我需要从大表的所有行读取数据,但我不想一次将所有数据都拉入内存.是否有一个SQLAlchemy函数将处理分页?也就是说,将几行拉入内存,然后在必要时获取更多行.

我知道你可以这样做limit,offset正如本文所暗示的那样,但如果我不需要,我宁愿不处理.

pagination sqlalchemy

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

具有偏移限制的选择查询太慢

我从互联网资源中读到,当偏移量增加时,查询会很慢.但就我而言,我觉得它太慢了.我在用postgres 9.3

这是查询(id是主键):

select * from test_table offset 3900000 limit 100;
Run Code Online (Sandbox Code Playgroud)

它返回我周围的数据10 seconds.我觉得它太慢了.我4 million在桌子上有记录.数据库的总体大小是23GB.

机器配置:

RAM: 12 GB
CPU: 2.30 GHz
Core: 10
Run Code Online (Sandbox Code Playgroud)

postgresql.conf我更改的文件中的几个值如下所示.其他人是默认的.

shared_buffers = 2048MB
temp_buffers = 512MB
work_mem = 1024MB
maintenance_work_mem = 256MB
dynamic_shared_memory_type = posix
default_statistics_target = 10000
autovacuum = on
enable_seqscan = off   ## its not making any effect as I can see from Analyze doing seq-scan
Run Code Online (Sandbox Code Playgroud)

除了这些,我也通过改变的值试过random_page_cost = 2.0cpu_index_tuple_cost = 0.0005 …

postgresql postgresql-9.1

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