Archive for category Programming

Making Python’s sqlite3 import easy as 1 2 3

Lurking within the normal Python 2.x distribution is the sqlite3 import, which is an amazingly powerful, no-server-required, mostly SQL compatible database engine that can be used in any project without restriction.

That’s the up side. The down side is, as a fairly complete database, there are many options and varied ways it can be used, and managing actual database transactions isn’t all that simple — to do it right, even a single query takes about sixteen lines of code. And yes, if you want maximum flexibility and the ability to use every feature in sqlite3, that’s how you should do it.

But. Most database operations are very straightforward. You want to issue a single command to the database, or a query. Perhaps you want to write a bunch of data and then commit it all at once so that the database doesn’t contain part of the data from a more complex transaction. You need to know if something went wrong, and if it did, what it was. Those are by far the most common use cases for me, and I suspect that’s true for others as well.

Frankly, it’s difficult enough dealing with the SQL query language itself. Why make actually using it harder than it has to be?
Read the rest of this entry »

Tags: , , , , , , , , , , , , , ,

What’s that Smell?

As they train to become a doctor, new interns are taught about many different diseases that produce various sets of otherwise similar symptoms. In conjunction with this new and complex knowledge, they are also taught this truism: “When you hear hoofprints, you must not initially assume a zebra is in the vicinity.” This pithy remark is meant to impart that, for instance, if a patient comes in bleeding from an orifice, one must not immediately assume that Ebola is in the building; more likely something much more common is in play, such as hemorrhoids or perhaps an unfortunate excess of enthusiasm coupled with a new, ahem, toy.

One of the clearer signs that I was becoming a competent programmer was that the problems in my code began, more and more often, to in fact, be zebras. Instead of a misplaced character or a missing clause or some kind of blatant conceptual error, the abject weirdnesses that were most often populating the realm of my final, demonstrably accurate diagnoses came to be things like operating system bugs, broken libraries, incomplete emulations and exotic compiler bugs. Zebras.
Read the rest of this entry »

Tags: , , , , , , , ,