Re: [sqlalchemy] How to format class property as another accessible property

2017-06-07 Thread Greg Silverman
Oh right, I've used the @property decorator before, just been a while.

Thanks for the explanation of @hybrid_property. Makes sense.

On Wed, Jun 7, 2017 at 5:32 PM, mike bayer  wrote:

>
>
> On 06/07/2017 06:19 PM, Greg Silverman wrote:
>
>> Thanks, it worked!
>>
>> I tried something similar using the @hybrid_property decorator, but could
>> not get it to work. What exactly is the difference between that and the
>> @property decorator?
>>
>
>
> @property is super normal Python stuff that's in all the Python tutorials
> and is something everyone should use all the time.
>
> @hybrid_property is more of a magic trick that's specific to the kind of
> query interface that SQLAlchemy has - in that in an ORM like SQLAlchemy
> (and lots of others), you access attributes off of classes, as well as
> instances of those classes, as part of regular use of the API.  This is not
> a standard object-oriented thing, it's kind of odd.   The @hybrid_property
> allows you to build functions that act a lot like @property, but they
> accommodate for accessing an attribute both at the "instance" (e.g. 'self')
> level and at the "class" level.   Which translated to SQLAlchemy means, at
> the "row I've loaded into memory" level and the "SQL expression I want to
> execute on the database" level.  The kinds of functions we can use in these
> two very different contexts are quite different.
>
>
>
>
>
>
>
>> Greg--
>>
>>
>> On Wed, Jun 7, 2017 at 5:08 PM, mike bayer > > wrote:
>>
>>
>>
>> On 06/07/2017 02:31 PM, GMS wrote:
>>
>> I am sure this is easier than I am making it, but I just want to
>> add a property to a class so that decimal representations get
>> truncated at 3 decimal digits.
>>
>> My class is this:
>>
>> class Measures(Model):
>> __tablename__= 'xcelera_measures'
>> id= Column(Numeric,primary_key=True)
>>   studyidk= Column(Numeric, ForeignKey('xcel.studyidk'))
>>  xceleragroup= relationship("Xcelera")
>>   explainstring= Column(String(255))
>>   mrn= Column(String(255))
>>   value= Column(Numeric)
>>
>>   __mapper_args__= {
>>   "order_by": [mrn]
>>   }
>>
>>
>> and 'value' is the property/attribute that I want to also have a
>> truncated version available in the class.
>>
>> I tried adding this to the class value_new =
>> column_property("%.3f" % value())
>>
>> but got an error that
>>
>> value_new = column_property("%.3f" % value)
>>
>>
>> "%" is a Python function, that doesn't execute on the database.
>>  This works as a normal Python descriptor:
>>
>> class MyClass(Base):
>>  # ...
>>
>>  @property
>>  def value_new(self):
>>  return "%.3f" % self.value
>>
>>
>>
>>
>>
>>
>>
>>
>> TypeError: float argument required, not Column
>>
>> I also tried this as a hybrid_property, but I don't think I was
>> using it correctly.
>>
>> All I want to do is have the truncated version of my attribute
>> available in my class.
>>
>> Thanks!
>>
>> Greg--
>>
>>
>> -- SQLAlchemy -
>> The Python SQL Toolkit and Object Relational Mapper
>>
>> http://www.sqlalchemy.org/
>>
>> To post example code, please provide an MCVE: Minimal, Complete,
>> and Verifiable Example. See http://stackoverflow.com/help/mcve
>>  for a full description.
>> ---
>> You received this message because you are subscribed to the
>> Google Groups "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from
>> it, send an email to sqlalchemy+unsubscr...@googlegroups.com
>> 
>> > >.
>> To post to this group, send email to sqlalchemy@googlegroups.com
>> 
>> > >.
>> Visit this group at https://groups.google.com/group/sqlalchemy
>> .
>> For more options, visit https://groups.google.com/d/optout
>> .
>>
>>
>> -- SQLAlchemy - The Python SQL Toolkit and Object Relational
>> Mapper
>>
>> http://www.sqlalchemy.org/
>>
>> To post example code, please provide an MCVE: Minimal, Complete, and
>> Verifiable Example.  See http://stackoverflow.com/help/mcve
>>  for a full description.
>> --- You received this message because you are subscribed to a topic
>> 

Re: [sqlalchemy] How to format class property as another accessible property

2017-06-07 Thread mike bayer



On 06/07/2017 06:19 PM, Greg Silverman wrote:

Thanks, it worked!

I tried something similar using the @hybrid_property decorator, but 
could not get it to work. What exactly is the difference between that 
and the @property decorator?



@property is super normal Python stuff that's in all the Python 
tutorials and is something everyone should use all the time.


@hybrid_property is more of a magic trick that's specific to the kind of 
query interface that SQLAlchemy has - in that in an ORM like SQLAlchemy 
(and lots of others), you access attributes off of classes, as well as 
instances of those classes, as part of regular use of the API.  This is 
not a standard object-oriented thing, it's kind of odd.   The 
@hybrid_property allows you to build functions that act a lot like 
@property, but they accommodate for accessing an attribute both at the 
"instance" (e.g. 'self') level and at the "class" level.   Which 
translated to SQLAlchemy means, at the "row I've loaded into memory" 
level and the "SQL expression I want to execute on the database" level. 
 The kinds of functions we can use in these two very different contexts 
are quite different.









Greg--

On Wed, Jun 7, 2017 at 5:08 PM, mike bayer > wrote:




On 06/07/2017 02:31 PM, GMS wrote:

I am sure this is easier than I am making it, but I just want to
add a property to a class so that decimal representations get
truncated at 3 decimal digits.

My class is this:

class Measures(Model):
__tablename__= 'xcelera_measures'
id= Column(Numeric,primary_key=True)
  studyidk= Column(Numeric, ForeignKey('xcel.studyidk'))
 xceleragroup= relationship("Xcelera")
  explainstring= Column(String(255))
  mrn= Column(String(255))
  value= Column(Numeric)

  __mapper_args__= {
  "order_by": [mrn]
  }


and 'value' is the property/attribute that I want to also have a
truncated version available in the class.

I tried adding this to the class value_new =
column_property("%.3f" % value())

but got an error that

value_new = column_property("%.3f" % value)


"%" is a Python function, that doesn't execute on the database. 
This works as a normal Python descriptor:


class MyClass(Base):
 # ...

 @property
 def value_new(self):
 return "%.3f" % self.value








TypeError: float argument required, not Column

I also tried this as a hybrid_property, but I don't think I was
using it correctly.

All I want to do is have the truncated version of my attribute
available in my class.

Thanks!

Greg--


-- 
SQLAlchemy -

The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete,
and Verifiable Example. See http://stackoverflow.com/help/mcve
 for a full description.
---
You received this message because you are subscribed to the
Google Groups "sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from
it, send an email to sqlalchemy+unsubscr...@googlegroups.com

>.
To post to this group, send email to sqlalchemy@googlegroups.com

>.
Visit this group at https://groups.google.com/group/sqlalchemy
.
For more options, visit https://groups.google.com/d/optout
.


-- 
SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper


http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and
Verifiable Example.  See http://stackoverflow.com/help/mcve
 for a full description.
--- You received this message because you are subscribed to a topic
in the Google Groups "sqlalchemy" group.
To unsubscribe from this topic, visit
https://groups.google.com/d/topic/sqlalchemy/3FFm1stwEoU/unsubscribe
.
To unsubscribe from this group and all its topics, send an email to
sqlalchemy+unsubscr...@googlegroups.com
.
To post to this group, send email to sqlalchemy@googlegroups.com
.

Re: [sqlalchemy] How to format class property as another accessible property

2017-06-07 Thread Greg Silverman
Thanks, it worked!

I tried something similar using the @hybrid_property decorator, but could
not get it to work. What exactly is the difference between that and the
@property decorator?

Greg--

On Wed, Jun 7, 2017 at 5:08 PM, mike bayer  wrote:

>
>
> On 06/07/2017 02:31 PM, GMS wrote:
>
>> I am sure this is easier than I am making it, but I just want to add a
>> property to a class so that decimal representations get truncated at 3
>> decimal digits.
>>
>> My class is this:
>>
>> class Measures(Model):
>> __tablename__= 'xcelera_measures'
>> id= Column(Numeric,primary_key=True)
>>  studyidk= Column(Numeric, ForeignKey('xcel.studyidk'))
>> xceleragroup= relationship("Xcelera")
>>  explainstring= Column(String(255))
>>  mrn= Column(String(255))
>>  value= Column(Numeric)
>>
>>  __mapper_args__= {
>>  "order_by": [mrn]
>>  }
>>
>>
>> and 'value' is the property/attribute that I want to also have a
>> truncated version available in the class.
>>
>> I tried adding this to the class value_new = column_property("%.3f" %
>> value())
>>
>> but got an error that
>>
>> value_new = column_property("%.3f" % value)
>>
>
> "%" is a Python function, that doesn't execute on the database.  This
> works as a normal Python descriptor:
>
> class MyClass(Base):
> # ...
>
> @property
> def value_new(self):
> return "%.3f" % self.value
>
>
>
>
>
>
>
>
>> TypeError: float argument required, not Column
>>
>> I also tried this as a hybrid_property, but I don't think I was using it
>> correctly.
>>
>> All I want to do is have the truncated version of my attribute available
>> in my class.
>>
>> Thanks!
>>
>> Greg--
>>
>>
>> --
>> SQLAlchemy -
>> The Python SQL Toolkit and Object Relational Mapper
>>
>> http://www.sqlalchemy.org/
>>
>> To post example code, please provide an MCVE: Minimal, Complete, and
>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full
>> description.
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to sqlalchemy+unsubscr...@googlegroups.com > sqlalchemy+unsubscr...@googlegroups.com>.
>> To post to this group, send email to sqlalchemy@googlegroups.com > sqlalchemy@googlegroups.com>.
>> Visit this group at https://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
> --
> SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper
>
> http://www.sqlalchemy.org/
>
> To post example code, please provide an MCVE: Minimal, Complete, and
> Verifiable Example.  See  http://stackoverflow.com/help/mcve for a full
> description.
> --- You received this message because you are subscribed to a topic in the
> Google Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/to
> pic/sqlalchemy/3FFm1stwEoU/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> sqlalchemy+unsubscr...@googlegroups.com.
> To post to this group, send email to sqlalchemy@googlegroups.com.
> Visit this group at https://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Greg M. Silverman

 ›  flora-script  ‹
 ›  grenzi.org  ›

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.


Re: [sqlalchemy] How to format class property as another accessible property

2017-06-07 Thread mike bayer



On 06/07/2017 02:31 PM, GMS wrote:
I am sure this is easier than I am making it, but I just want to add a 
property to a class so that decimal representations get truncated at 3 
decimal digits.


My class is this:

class Measures(Model):
__tablename__= 'xcelera_measures'
id= Column(Numeric,primary_key=True)
 studyidk= Column(Numeric, ForeignKey('xcel.studyidk'))
xceleragroup= relationship("Xcelera")
 explainstring= Column(String(255))
 mrn= Column(String(255))
 value= Column(Numeric)

 __mapper_args__= {
 "order_by": [mrn]
 }


and 'value' is the property/attribute that I want to also have a 
truncated version available in the class.


I tried adding this to the class value_new = column_property("%.3f" % 
value())


but got an error that

value_new = column_property("%.3f" % value)


"%" is a Python function, that doesn't execute on the database.  This 
works as a normal Python descriptor:


class MyClass(Base):
# ...

@property
def value_new(self):
return "%.3f" % self.value









TypeError: float argument required, not Column

I also tried this as a hybrid_property, but I don't think I was using it 
correctly.


All I want to do is have the truncated version of my attribute available 
in my class.


Thanks!

Greg--


--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and 
Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
description.

---
You received this message because you are subscribed to the Google 
Groups "sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send 
an email to sqlalchemy+unsubscr...@googlegroups.com 
.
To post to this group, send email to sqlalchemy@googlegroups.com 
.

Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.


--
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper


http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups "sqlalchemy" group.

To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.


[sqlalchemy] How to format class property as another accessible property

2017-06-07 Thread GMS
I am sure this is easier than I am making it, but I just want to add a 
property to a class so that decimal representations get truncated at 3 
decimal digits.

My class is this:

class Measures(Model):
__tablename__ = 'xcelera_measures'
id = Column(Numeric, primary_key=True)
studyidk = Column(Numeric, ForeignKey('xcel.studyidk'))
xceleragroup = relationship("Xcelera")
explainstring = Column(String(255))
mrn = Column(String(255))
value = Column(Numeric)

__mapper_args__ = {
"order_by": [mrn]
}


and 'value' is the property/attribute that I want to also have a truncated 
version available in the class. 

I tried adding this to the class value_new = column_property("%.3f" % 
value())

but got an error that

value_new = column_property("%.3f" % value)

TypeError: float argument required, not Column

I also tried this as a hybrid_property, but I don't think I was using it 
correctly.

All I want to do is have the truncated version of my attribute available in 
my class.

Thanks!

Greg--


-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.