Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Jan 31 2019 16:42
    fantix commented #428
  • Jan 31 2019 14:11
    wwwjfy labeled #432
  • Jan 31 2019 14:11
    wwwjfy commented #432
  • Jan 31 2019 14:10

    wwwjfy on pyup-update-pytest-4.1.0-to-4.2.0

    (compare)

  • Jan 31 2019 14:10

    wwwjfy on master

    Update pytest from 4.1.0 to 4.2… (compare)

  • Jan 31 2019 14:10
    wwwjfy closed #431
  • Jan 31 2019 13:05
    diegoyosiura opened #432
  • Jan 31 2019 07:08
    aliyarly starred fantix/gino
  • Jan 31 2019 03:48
    coveralls commented #431
  • Jan 31 2019 03:41
    pyup-bot opened #431
  • Jan 31 2019 03:41

    fantix on pyup-update-pytest-4.1.0-to-4.2.0

    Update pytest from 4.1.0 to 4.2… (compare)

  • Jan 31 2019 03:41

    fantix on pyup-update-pytest-4.1.0-to-4.2.0

    (compare)

  • Jan 31 2019 01:55
  • Jan 30 2019 13:55

    wwwjfy on pyup-update-quart-0.6.10-to-0.7.0

    (compare)

  • Jan 30 2019 13:06

    wwwjfy on pyup-update-flake8-3.5.0-to-3.7.1

    (compare)

  • Jan 30 2019 13:06

    wwwjfy on master

    Update flake8 from 3.5.0 to 3.7… use latest flake8 in tests, ref… Merge pull request #430 from fa… (compare)

  • Jan 30 2019 13:06
    wwwjfy closed #430
  • Jan 30 2019 13:03
    coveralls commented #430
  • Jan 30 2019 12:58
    wwwjfy synchronize #430
  • Jan 30 2019 12:58

    wwwjfy on pyup-update-flake8-3.5.0-to-3.7.1

    use latest flake8 in tests, ref… (compare)

soulilya
@soulilya
hallo! can you explain how to insert many to many data? thanks
1 reply
Erus Lawliet
@eruslawliet_twitter

Hi there, I'm new to gino, I'm trying to understand the load() to make relationships.

Let's say I have something like this:

class Board(db.Model):

    id = db.Column(
        db.Integer,
        primary_key=True,
        index=True,
    )
    topic_id = db.Column(
        db.Integer,
        db.ForeignKey('topic.id'),
        nullable=False,
    )

class User(db.Model):

    id = db.Column(
        db.Integer,
        primary_key=True,
        index=True,
    )
    nickname = db.Column(
        db.String(15),
        nullable=False,
        default='',
    )
    board_id = db.Column(
        db.Integer,
        db.ForeignKey('board.id'),
        nullable=False,
    )

class UserCard(db.Model):"

    id = db.Column(
        sa.Integer,
        primary_key=True,
        index=True,
    )
    user_id = db.Column(
        db.Integer,
        db.ForeignKey('user.id'),
        nullable=False,
    )

class Topic(db.Model):

    id = db.Column(
        sa.Integer,
        primary_key=True,
        index=True,
    )
    title = db.Column(
        db.String(40),
        nullable=False,
        default='',
    )

Is there a way to "load" the board with all the relations? I'm not sure how to do that, thanks!

Fantix King
@fantix
it would be something like:
cards = await (
    UserCard.outerjoin(User)
    .outerjoin(Board)
    .outerjoin(Topic)
    .select()
    .gino.load(UserCard.load(user=User.load(board=Board.load(topic=Topic))))
    .all()
)
or use different loaders like Board.distinct().load(topic=Topic, cards=UserCard.load(user=User)) to get boards
you'd need a def cards(self, card): self._cards.append(card) under Board class
4 replies
Erus Lawliet
@eruslawliet_twitter
wow thank you so much! And if I want to add a .where, for example to get the Board.id == board_id with all the information? I mean the users, the user cards, etc. Where should I put that .where
Fantix King
@fantix
yeah sure, anywhere before the .gino and after the .select()
Erus Lawliet
@eruslawliet_twitter
in your second query example the .gino should go at the end of the query or at the start? like this example in the docs:
query = Child.outerjoin(Parent).select()
parents = await query.gino.load(
    Parent.distinct(Parent.id).load(add_child=Child)).all()
Fantix King
@fantix
just replace the parameter of .load() with the second loader
Erus Lawliet
@eruslawliet_twitter
awesome! I'm gonna make some tests now, that was really helpful! thank you!
Fantix King
@fantix
sure thing
Erus Lawliet
@eruslawliet_twitter
hi again, I couldn't make it work, I can obtain the board with the topic but not the users with their cards, so my main goal is to get specific board with it's respective topic, and the users with their cards. Do I need to add def cards(self, card): self._cards.append(card) under user and def participants(self, participant): self._participants.append(participant) under board? My query looks like this:
board = await UserCard.outerjoin(
        User,
    ).outerjoin(
        Board,
    ).outerjoin(
        Topic,
    ).select().where(
        Board.id == board_id,
    ).gino.load(
        Board.distinct().load(
            topic=Topic,
            cards=UserCard.load(
                user=User)
        )).all()
Cobalt
@Chaostheorie
@fantix Would it be possible to activate dependabot for dependency updates for python-gino/*? It would help with keeping dependencies up to date/ having a look on security breaches in dependencies
Fantix King
@fantix
sure
Cobalt
@Chaostheorie
Thanks ^^
Fantix King
@fantix
np, done
Cobalt
@Chaostheorie
Could you activate it for https://github.com/python-gino/gino-quart it seems admin permissions are required
Fantix King
@fantix
Only security updates
Only lockfile updates (ignore updates that require Pipfile changes)
Only top-level dependencies (and security patches for subdependencies)
preferences pls?
Cobalt
@Chaostheorie
top-level dependencies would be nice
Would help me with keeping track of newer wuart etc versions
Thanks a lot
Fantix King
@fantix
OK! np - and live updates? Or daily/weekly/monthly?
Cobalt
@Chaostheorie
monthly.
Fantix King
@fantix
all set :+1:
Cobalt
@Chaostheorie
Thanks
Fantix King
@fantix
thank you!
Erus Lawliet
@eruslawliet_twitter
hi there, how can I do a .join() with Gino to obtain a model instead of a RowProxy?
Fantix King
@fantix
Erus Lawliet
@eruslawliet_twitter
thanks, I was a little confused but I could make it work :)
Fantix King
@fantix
:+1:
Erus Lawliet
@eruslawliet_twitter
hello! is there a way in Gino to do a cascade delete?
Erus Lawliet
@eruslawliet_twitter
hello! im trying to do a subquery but i get sqlalchemy.exc.ArgumentError: SQL expression object expected, got object of type <class 'gino.crud.QueryModel'> instead
i'm basically trying to traduce this sql statement into gino: SELECT DISTINCT participant.loop_id FROM participant WHERE (participant.loop_id not in (SELECT DISTINCT participant.loop_id FROM participant WHERE participant.account_id = ?));
2 replies
Daniel Mannarino
@dmannarino

Hi folks! I'm having trouble with a Gino WHERE...IN query, perhaps you can point out what I'm doing wrong. The code used to be

query = ORMAsset.query if asset_type is not None: query = query.where(ORMAsset.asset_type == asset_type)
which works fine (asset_type is a string). But I want to make asset_type possibly a list, so I changed this to
query = ORMAsset.query if asset_type is not None: if type(asset_type) == List: query = query.where(ORMAsset.asset_type.in_(asset_type)) else: query = query.where(ORMAsset.asset_type == asset_type)
Gino doesn't like this, throwing asyncpg.exceptions.DataError: invalid input for query argument $3: [<AssetType.raster_tile_set: 'Raster til... (expected str, got list)
Any idea why this is failing? Apologies for the formatting, I'm trying to make it better.

2 replies
Daniel Mannarino
@dmannarino
Oh, I also tried ORMAsset.asset_type in asset_type to the same result.
Cobalt
@Chaostheorie

i'm basically trying to traduce this sql statement into gino: SELECT DISTINCT participant.loop_id FROM participant WHERE (participant.loop_id not in (SELECT DISTINCT participant.loop_id FROM participant WHERE participant.account_id = ?));

You can do this or define the column with the foreign key with Column(..., ondelete="CASCADE") when defining your schema. Otherwise you may have to just use query and delete

Cobalt
@Chaostheorie
e.g. query.where(table.foreign_id == toreign_table.id)…
Pavel Savchenko
@asfaltboy
Hi, does anyone know what the equivalent of SQLAlchemy's (ORM) options(db.defer('location')) in gino (ref docs)?
Pavel Savchenko
@asfaltboy

Figured I could exclude a field using select method of the model, i.e:

cols = [c.name for c in MyModel.__table__.c if c.name != 'large_field']
MyModel.select(*cols).where(MyModel.field != None).gino.all()

Would adding it to the docs be a good idea? Is the a better way to deal with deferring fields?

7 replies
Andrey
@Nordhaimer_twitter
Hi, there. How can I make such sql with gino:
select groups, coalesce(json_agg(child_groups) filter (where child_groups.parent_id is not null), '[]') FROM groups LEFT OUTER JOIN groups AS child_groups ON groups.id = child_groups.parent_id group by groups.id;
6 replies
const-shi
@const-shi

hi! i want do something like that

await select([User]).select_from(User.outerjoin(Group)).limit(1)
await User.update.values(name="123").where(User.id ==1)

so no .gino.all() and gino.status()
i can do that after that hack:

from sqlalchemy.sql import Select, Update, Delete, Insert
from sqlalchemy.sql.base import Executable
def executable_await(self):
    if isinstance(self, (Update, Delete)):
        return self.gino.status().__await__()
    elif isinstance(self, (Select, Insert)):
        return self.gino.all().__await__()
Executable.__await__ = executable_await
UpdateRequest.__await__ = lambda self: self.apply().__await__()

is that ok?

19 replies