Hi,
Thanks for the reply. I'm just reading over the main body of your email again, but I just wanted to reply to the location thing I was on about...

I don't think I explained it all that well, so let me give you a use case.

I have a player object, called Chris. That player's _location is 3, which happens to be the id of another object in the database. It's fine, I can do session.get(3), and get the exact object, but I'd like to just do Chris.location, which would be the fully qualified object. That way, I could do like Chris.location.location.name.

As I said, I've already got that with my @property, but it would be cool if there was some kind of type which would do it for me... Think I'm sort of asking about foreign keys, but within the same table perhaps? Perhaps not the best explanation, and I don't really know databases, I just know what I want to happen LOL.

Cheers,


On 05/07/2015 16:36, Mike Bayer wrote:


On 7/4/15 5:09 PM, Chris Norman wrote:

Hi all,

My name is Chris Norman, and I am a hobbyist programmer in the UK.


Firstly, please let me thank the creators for a truly wonderful piece of software! I was starting my application and coding the SQL by hand, which was a pain considering I don’t really know SQL all that well. SQLAlchemy actually gets around a load of problems I was having with the initial idea.


Anyways, now for my problem:


I’m trying to make a Pythonic sort of copy (with the view to splitting off) of the popular Lambda MOO server. I’m using a proper database backend, so that certain things which are a major pain in MOO will become much easier. That, and it would be cool to have a threaded version of MOO, without all the annoying bits.


Anyways, my question is this:

I created my tables with declarative and all that - works fine in fact. But just tonight I added a new column to one table. When I did Base.metadata.create_all(), I thought SQLAlchemy would realise there’s an added column, and add it to the database for me, but it hasn’t. Is there a way to make it do that so I don’t have to do any clever things when the server loads to check for differences between the database and the objects I’ve created?


this is a bigger issue in relational databases for which you need to run specific commands on the database to add new columns and features. From an application point of view we call this "schema migrations" and the current tool recommended for this is Alembic: http://alembic.readthedocs.org/

There's a blurb on the whole subject here:

http://docs.sqlalchemy.org/en/rel_1_0/core/metadata.html#altering-schemas-through-migrations

as for sqlalchemy-migrate I am actually one of the maintainers for it now and while we have to keep it running for Openstack, it's not by any means under "active development" at this point that paragraph is out of date.




Secondly, and sort of incidentally because I’ve already worked around this, is there any way to return an object from an id without having to use session.get? I kind of have this in mind:

I'm assuming you mean query.get(), session i think may have had a get() method at some point but it's long removed. You would just query.filter(object.id == <foo>), but below it seems like that's not what you mean.




class Object(Base):

 """My standard object."""

 __tablename__ = 'objects'

id = Column(Integer, primary_key = True, nullable = False) # The primary key.

 location = Column(MagicType, default = None) # Location field.


The MagicType would contain an integer database-side, like 1, or 2, whatever, but would map directly to the object with that id.


I have gotten round this by using:

@property

def location(self):

 return self.location.id if self.location else None


@location.setter

def location(self, value):

 self._location = value.id if value else None


But I was wondering if there was a type which would do this with less properties being defined?

so.....are we saying here, get() is OK, but it's the fact that you need to know the name "MyClass.id" ? I'm not really understanding what this @property does. A brief but complete example of use would be helpful.




Cheers for all the help, and thanks once again for SLQAlchemy, it looks mighty fine to me! :-)


Cheers, and take care.


Chris Norman.


--
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 <mailto:sqlalchemy+unsubscr...@googlegroups.com>. To post to this group, send email to sqlalchemy@googlegroups.com <mailto:sqlalchemy@googlegroups.com>.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
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/p37SMlbKHoQ/unsubscribe. To unsubscribe from this group and all its topics, send an email to sqlalchemy+unsubscr...@googlegroups.com <mailto:sqlalchemy+unsubscr...@googlegroups.com>. To post to this group, send email to sqlalchemy@googlegroups.com <mailto:sqlalchemy@googlegroups.com>.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to