Questions tagged «sqlalchemy»

SQLAlchemy是Python SQL工具箱和对象关系映射器,为应用程序开发人员提供了SQL的全部功能和灵活性。

4
如何使用SQLAlchemy创建新数据库?
使用SQLAlchemy,将创建一个Engine对象,如下所示: from sqlalchemy import create_engine engine = create_engine("postgresql://localhost/mydb") engine如果在参数create_engine(在这种情况下为mydb)中指定的数据库不存在,则访问将失败。如果指定的数据库不存在,是否可以告诉SQLAlchemy创建一个新数据库?
103 python  sqlalchemy 


11
如何从SQLAlchemy表达式获取原始的编译SQL查询?
我有一个SQLAlchemy查询对象,想要获取已绑定所有参数的已编译SQL语句的文本(例如,否%s或其他变量正等待语句编译器或MySQLdb方言引擎的绑定等)。 调用str()查询将显示如下内容: SELECT id WHERE date_added <= %s AND date_added >= %s ORDER BY count DESC 我试着在query._params中查找,但这是一个空字典。我使用装饰器的这个示例sqlalchemy.ext.compiler.compiles编写了自己的编译器,但即使那里的语句仍然有%s我想要的数据。 我无法弄清楚何时混入参数来创建查询。在检查查询对象时,它们始终是一个空字典(尽管查询执行得很好,并且当您打开echo记录时引擎会打印出来)。 我开始收到消息,SQLAlchemy不想让我知道底层查询,因为它破坏了表达式API接口的所有不同DB-API的一般性质。我不在乎查询是否在我发现查询之前就已经执行了;我只是想知道!
101 python  sql  mysql  sqlalchemy 

2
SQLAlchemy:创建与重用会话
只是一个简单的问题:SQLAlchemy的有关谈判调用sessionmaker()一次,但调用导致Session()每次你需要跟你的数据库的时间类。对我来说,这意味着第二个我会做我的第一个session.add(x)或类似的事情,我会先做 from project import Session session = Session() 到目前为止,我所做的只是session = Session()在模型中进行一次调用,然后始终在应用程序中的任何位置导入相同的会话。由于这是一个Web应用程序,因此通常意味着相同(因为执行一个视图)。 但是区别在哪里?一直使用一个会话而不是在数据库中使用它直到我的函数完成,然后在下次我想与数据库对话时创建一个新会话的缺点是什么? 我得到的是,如果我使用多个线程,则每个线程都应该有自己的会话。但是,使用scoped_session(),我已经确定该问题不存在,对吗? 请澄清我的任何假设是否错误。


8
sqlalchemy模型的已定义列上迭代的方法?
我一直在尝试找出如何遍历SQLAlchemy模型中定义的列列表。我希望它为一些模型编写一些序列化和复制方法。我不能仅对其进行迭代,obj.__dict__因为它包含许多SA特定项。 有人知道一种从以下项中获取id和desc名称的方法吗? class JobStatus(Base): __tablename__ = 'jobstatus' id = Column(Integer, primary_key=True) desc = Column(Unicode(20)) 在这种情况下,我可以轻松创建一个: def logme(self): return {'id': self.id, 'desc': self.desc} 但我更喜欢自动生成dict(对于较大的对象)的东西。



3
如何在Alembic升级脚本中执行插入和更新?
我需要在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') ) 我想介绍一个“团队”表。我创建了第二个修订版: 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)) 我希望第二次迁移也添加以下数据: 填充团队表: INSERT INTO teams (name) SELECT DISTINCT team FROM players; 根据players.team名称更新players.team_id: UPDATE players AS p …

2
使用sqlalchemy的声明性ORM扩展时的多列索引
根据文档和sqlalchemy.Column该类中的注释,我们应该使用该类sqlalchemy.schema.Index来指定包含多个列的索引。 但是,该示例显示了如何通过直接使用Table对象来实现此目的,如下所示: meta = MetaData() mytable = Table('mytable', meta, # an indexed column, with index "ix_mytable_col1" Column('col1', Integer, index=True), # a uniquely indexed column with index "ix_mytable_col2" Column('col2', Integer, index=True, unique=True), Column('col3', Integer), Column('col4', Integer), Column('col5', Integer), Column('col6', Integer), ) # place an index on col3, col4 Index('idx_col34', mytable.c.col3, mytable.c.col4) …


5
SqlAlchemy-按关系属性过滤
我在SQLAlchemy上没有太多经验,并且有一个我无法解决的问题。我尝试搜索,并且尝试了很多代码。这是我的课程(简化为最重要的代码): class Patient(Base): __tablename__ = 'patients' id = Column(Integer, primary_key=True, nullable=False) mother_id = Column(Integer, ForeignKey('patients.id'), index=True) mother = relationship('Patient', primaryjoin='Patient.id==Patient.mother_id', remote_side='Patient.id', uselist=False) phenoscore = Column(Float) 我想查询所有母亲的phenoscore为(例如)的患者 == 10 如前所述,我尝试了很多代码,但我不明白。在我看来,合乎逻辑的解决方案是 patients = Patient.query.filter(Patient.mother.phenoscore == 10) 因为,您可以.mother.phenoscore在输出时访问每个元素,但是此代码不执行此操作。 是否有(直接)可能性通过关系的属性进行过滤(而无需编写SQL语句或额外的连接语句),所以我需要多次进行这种过滤。 即使没有简单的解决方案,我也很高兴获得所有答案。

6
flask-sqlalchemy或sqlalchemy
我是flask和sqlalchemy的新手,我只是开始在flask应用程序上工作,现在我正在使用sqlalchemy。我想知道使用flask-sqlalchemy与sqlalchemy是否可以获得任何显着的好处。我在http://packages.python.org/Flask-SQLAlchemy/index.html中找不到足够的动机,或者也许我不明白它的价值!谢谢您的澄清。

5
sqlalchemy:如何通过一个查询联接多个表?
我有以下SQLAlchemy映射的类: class User(Base): __tablename__ = 'users' email = Column(String, primary_key=True) name = Column(String) class Document(Base): __tablename__ = "documents" name = Column(String, primary_key=True) author = Column(String, ForeignKey("users.email")) class DocumentsPermissions(Base): __tablename__ = "documents_permissions" readAllowed = Column(Boolean) writeAllowed = Column(Boolean) document = Column(String, ForeignKey("documents.name")) 我需要为这样的一张桌子user.email = "user@email.com": email | name | document_name | …
92 python  sql  join  sqlalchemy 

6
内存有效的内置SqlAlchemy迭代器/生成器?
我有一个〜10M记录的MySQL表,可以使用SqlAlchemy进行交互。我发现对这个表的大子集的查询将消耗过多的内存,即使我以为我使用的是内置生成器,它可以智能地获取数据集的一口大小的块: for thing in session.query(Things): analyze(thing) 为了避免这种情况,我发现我必须构建自己的迭代器,该迭代器会分块地进行处理: 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) 这是正常现象还是关于SA内置发电机我缺少什么? 这个问题的答案似乎表明内存消耗是不希望的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.