The last six months have involved a lot more writing of code than the previous couple of years.
I’ve been tweeting little things I learn on a daily basis and thought I’d look back on this week.
format()
A reocurring problem with report writing is getting numbers formatted properly for the occassion. I discovered ‘format’ in Python this week:
print "{0:.2f}%".format(float(1)/3 * 100)
That prints out a float to 2 decimal places. I looked around and Dive Into Python has similar syntax, but without the format() function. So, the equivalent would be:
print "blah %.2f" % (float(1) / 3 * 100)
So, why use one over the other? A user on StackOverflow suggested that compatibility with 2.5 might drive a person to use ‘%’ over ‘format()’, but otherwise, the poster suggested that format() is the cleaner looking and more flexible choice.
set search_path = bixie
I’m working on a new schema for a project. We’re rolling out a prototype quickly, so we’re going to house it in our existing production database for now. To keep things easy to clean up, Laura suggested that we put things into a separate schema. For managing our database models, I’ve switched to using SQLAlchemy, and also alembic for migrations. This made it super easy to specify that I wanted all the Bixie related tables in their own schema:
class BixieCrash(DeclarativeBase):
__table_args__ = {'schema': 'bixie'}
__tablename__ = 'crashes'
And that was it.
Then, to avoid having to add ‘bixie.’ to all the table paths in test queries, I put this command into the tests:
cursor.execute(""" SET search_path TO bixie """)
I imagine there are some other ways to handle this. We’re not really using the ORM for anything other than schema loading, so I’ll probably add that to our connection initialization code for the new app. Then developers can write their queries as without any concerns about being in the correct schema.
And I’ll glow just a little bit about deploying alembic on stage!
set colorcolumn=80
I’ve been trying to write prettier Python. Today’s micro-effort was figuring out how display a vertical line to tell me when I exceed the 80 character width. The proper command to add to .vimrc is:
:set colorcolumn=80
Which looks something like:
“I’ve switched to using SQLAlchemy, and also alembic for migrations.”
Curious: from what did you switch?
We were using shell scripts and raw SQL files. There’s still some raw SQL involved for the user-defined functions. However, loading of newly defined functions is managed by alembic.
Are you aware that vim has the possibility to do automatic word wrapping?
Yes! I have tended to err on the side of manual adjustment for fixing past sins, though.
Regarding the format() thing, it’s basically old vs new. The % operator is the way Python used to do this way back – it’s a convenient syntax most of the time (apart from how easy it is to accidentally pass a string as a parameter list, instead of a tuple containing a string).
But it’s deprecated in favor of the format function… not sure why, but I’d guess it’s to avoid having special syntax unnecessarily… much as how in Python3, the print statement became a method.