为什么这个简单的测试用例使用SQLAlchemy插入100,000行比直接使用sqlite3驱动程序慢25倍?我在实际应用程序中看到了类似的减速.难道我做错了什么?
#!/usr/bin/env python
# Why is SQLAlchemy with SQLite so slow?
# Output from this program:
# SqlAlchemy: Total time for 100000 records 10.74 secs
# sqlite3: Total time for 100000 records 0.40 secs
import time
import sqlite3
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
Base = declarative_base()
DBSession = scoped_session(sessionmaker())
class Customer(Base):
__tablename__ = "customer"
id = Column(Integer, primary_key=True)
name = Column(String(255))
def init_sqlalchemy(dbname = 'sqlite:///sqlalchemy.db'):
engine = create_engine(dbname, echo=False) …
Run Code Online (Sandbox Code Playgroud) 如何在SQL中添加过滤器以从特定列中选择NOT NULL值?
SELECT *
FROM table
WHERE YourColumn IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
如何使用SQLAlchemy过滤器执行相同的操作?
select = select(table).select_from(table).where(all_filters)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 SQLAlchemy 连接到 Postgres 数据库。我已经安装了 psycopg2。但是,我收到错误sqlalchemy.exc.NoSuchModuleError: Can't load plugin: sqlalchemy.dialects:postgres
。如何配置 SQLAlchemy 以连接到 PostgreSQL?
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "postgres://username@localhost:5432/template1"
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud) 我需要在Alembic升级期间更改数据.
我目前在第一次修订中有一个'玩家'表:
def upgrade():
op.create_table('player',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.Unicode(length=200), nullable=False),
sa.Column('position', sa.Unicode(length=200), nullable=True),
sa.Column('team', sa.Unicode(length=100), nullable=True)
sa.PrimaryKeyConstraint('id')
)
Run Code Online (Sandbox Code Playgroud)
我想介绍一个'团队'表.我创建了第二个版本:
def upgrade():
op.create_table('teams',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('name', sa.String(length=80), nullable=False)
)
op.add_column('players', sa.Column('team_id', sa.Integer(), nullable=False))
Run Code Online (Sandbox Code Playgroud)
我想第二次迁移也添加以下数据:
填充团队表:
INSERT INTO teams (name) SELECT DISTINCT team FROM players;
Run Code Online (Sandbox Code Playgroud)根据players.team名称更新players.team_id:
UPDATE players AS p JOIN teams AS t SET p.team_id = t.id WHERE p.team = t.name;
Run Code Online (Sandbox Code Playgroud)如何在升级脚本中执行插入和更新?
我有一个~10M记录的MySQL表,我使用SqlAlchemy进行交互.我发现对这个表的大型子集的查询将占用太多内存,即使我认为我使用的是内置生成器,智能地获取数据集的一口大小的块:
for thing in session.query(Things):
analyze(thing)
Run Code Online (Sandbox Code Playgroud)
为了避免这种情况,我发现我必须构建自己的迭代器,这些迭代器会以块的形式出现:
lastThingID = None
while True:
things = query.filter(Thing.id < lastThingID).limit(querySize).all()
if not rows or len(rows) == 0:
break
for thing in things:
lastThingID = row.id
analyze(thing)
Run Code Online (Sandbox Code Playgroud)
这是正常的还是有关于SA内置发电机我缺少的东西?
这个问题的答案似乎表明内存消耗是不可预期的.
有DataFrame.to_sql方法,但它只适用于mysql,sqlite和oracle数据库.我不能传递给这种方法postgres连接或sqlalchemy引擎.
我正在使用这里描述的MySQLicious类型模式来建立一个简单的标记系统.我已经在4个不同的SO线程中阅读了一些标记模式的替代实现,这最适合我的需求.
条目集合有标签"apple banana orange"和"strawberry banana lemon",我正在尝试找到Elixir/SQLAlchemy等效语句
SELECT * FROM table WHERE tags LIKE "%banana%";
Run Code Online (Sandbox Code Playgroud)
我无法找到任何这样的方法来构造Class.query.filter/filter_by()命令,并且无法在文档中看到任何模块的类似方法.有一个简单的方法吗?或者我应该只使用原始SQL.
额外问题:MySQLicious架构的一个缺点是我可能希望搜索"%apple%"但返回"菠萝".是否有高级方法来处理此测试用例?或者我应该在每个查询中包含一个前导空格?
nB:对于那些关心的人来说,这是我对数据库的第一次体验,所以我可能会忽略其他线程中提到的模式的核心优势.我的应用程序用于记录一个或两个关于已完成任务的句子,列[TaskID,Tags,Notes,StartTime,StopTime,TimeTaken],有点像简单的日记.主要用于教程目的.我希望能够通过单个标签进行搜索,以便大致了解我在给定任务上花费的时间.
任何人都有使用MongoKit,MongoEngine或Flask-MongoAlchemy for Flask的经验吗?
你更倾向哪个?积极或消极的经历?Flask-Newbie的选项太多了.
我需要通过id
类似的东西查询SQLAlchemy数据库
User.query.filter_by(用户名= '彼得')
但对于身份证.我该怎么做呢?[搜索Google和SO没有帮助]