[sqlalchemy] is it possible to implement this anti-pattern in SQLAlchemy?

2020-05-16 Thread Jonathan Vanasco
Ok never mind! 

I realized I could scrap this entire functionality and replace it with 
something else.

The use-case was trying to detect the backup renewal options for SSL 
Certificates if the private key Or account key is revoked. (foo is an ACME 
order if available, bar is the certificate).  Instead of automatically fixing 
these, I’m just going to log them as “needs triage” and let each one be managed 
individually.

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/c6353ed2-cd8f-43ab-8b1e-eec137265995%40googlegroups.com.


Re: [sqlalchemy] Passing reference to model to model column_property function

2020-05-16 Thread Jonathan Vanasco
It’s been a while since I’ve worked on stuff like this, but IIRC the simplest 
way was to use a function that accepts an ID and to flush in SqlAlchemy before 
executing it. Then you select the necessary row fields within the sql function, 
instead of passing args in or trying to pass a row in. 

In my experience, when you pass multiple args in, the function becomes very 
fragile and prone to break as your model changes.

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/d9a59130-e7f8-4c24-96ad-c0e8bb255bc3%40googlegroups.com.


Re: [sqlalchemy] Passing reference to model to model column_property function

2020-05-16 Thread Mike Bayer


On Sat, May 16, 2020, at 1:04 PM, Erol Merdanović wrote:
> Hi
> 
> I have a model definition
> 
> class Product(db.Model):
> __tablename__ = "products"
> 
> id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
> sku = db.Column(db.String(255), nullable=False, unique=True, index=True)
> 
> 
> Product.base_price = column_property(
> cast(func.get_product_price(), Numeric(15, 5)).label("base_price")
> )
> 
> get_product_price is postgres function
> 
>> CREATE OR REPLACE FUNCTION public.get_product_price()
>>  RETURNS numeric AS
>> $BODY$
>>  BEGIN
>>  return 100;
>>  END;
>>  $BODY$
>>  LANGUAGE plpgsql VOLATILE
>>  COST 100;
> 
> If I execute the query as 
> 
> Product.query.order_by(Product.base_price.asc()).all() 
> 
> it all works great. 
> 
> The problem is if I want to pass the product to function
> 
>> CREATE OR REPLACE FUNCTION public.get_product_price(product products)
>>  RETURNS numeric AS
>> $BODY$
>> -- do something with product
>>  BEGIN
>>  return 100;
>>  END;
>>  $BODY$
>>  LANGUAGE plpgsql VOLATILE
>>  COST 100;
> 
> Is it possible to pass the reference/alias to product to function? I tried 
> with alias but without any success.

I'm not deeply familiar with PGs elaborate syntaxes, are you trying to pass 
whole table rows into the function? We're only beginning to consider supporting 
this syntax which you can see in issues like 
https://github.com/sqlalchemy/sqlalchemy/issues/3566 
https://github.com/sqlalchemy/sqlalchemy/issues/5256 . 

Assuming SQLAlchemy supported that syntax, which you *can* get using workaround 
in the above linked issues, it's still not clear how this would apply to a 
mapped column_property(). A column_property() is a fixed SQL expression that 
does not change and does not accept arguments. If you wanted to pass runtime 
arguments to a mapped attribute and have it return a SQL function, use a hybrid 
method:

https://docs.sqlalchemy.org/en/13/orm/extensions/hybrid.html#sqlalchemy.ext.hybrid.hybrid_method






> 
> 

> --
>  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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/071cec63-88d8-4660-bfe0-e5317924493e%40googlegroups.com
>  
> .

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/efaa2813-221e-4520-8712-cb9c23a36ec3%40www.fastmail.com.


[sqlalchemy] Passing reference to model to model column_property function

2020-05-16 Thread Erol Merdanović
Hi

I have a model definition

class Product(db.Model):
__tablename__ = "products"

id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
sku = db.Column(db.String(255), nullable=False, unique=True, index=True)


Product.base_price = column_property(
cast(func.get_product_price(), Numeric(15, 5)).label("base_price")
)

get_product_price is postgres function

CREATE OR REPLACE FUNCTION public.get_product_price()
>   RETURNS numeric AS
> $BODY$
> BEGIN
>return 100;
> END;
> $BODY$
>   LANGUAGE plpgsql VOLATILE
>   COST 100;


If I execute the query as 

Product.query.order_by(Product.base_price.asc()).all() 

it all works great. 

The problem is if I want to pass the product to function

CREATE OR REPLACE FUNCTION public.get_product_price(product products)
>   RETURNS numeric AS
> $BODY$
> -- do something with product
> BEGIN
>return 100;
> END;
> $BODY$
>   LANGUAGE plpgsql VOLATILE
>   COST 100;


Is it possible to pass the reference/alias to product to function? I tried 
with alias but without any success.

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/071cec63-88d8-4660-bfe0-e5317924493e%40googlegroups.com.