Revision 14 as of 2007-08-31 07:02:13

Clear message

TableOfContents

Storm Manual

This is the detailed documentation for Storm. For a more hands-on approach, check out the [:Tutorial: Tutorial].

Databases

The create_database() function

The create_database() function has the following prototype:

database = create_database(uri)

The uri parameter may be either a URI string or a URI object. The following URIs are examples of acceptable syntax:

MySQL

URIs

Dependencies

MySQL support depends on the [http://mysql-python.sf.net/ MySQLdb] module for Python.

PostgreSQL

URIs

Dependencies

PostgreSQL support depends on the [http://www.initd.org/tracker/psycopg/wiki/PsycopgTwo psycopg2] module for Python.

SQLite

Dependencies

SQLite support depends on the [http://www.initd.org/tracker/pysqlite/wiki/pysqlite pysqlite2] module for Python.

The Store interface

The ResultSet interface

Properties

What is a property in Storm

Common constructor parameters

Most properties accept the following properties. All of them are optional.

Defining compound keys

To define a compound key in Storm, use the __storm_primary__ class-level attribute. It should be set to a tuple with the names of the properties composing the primary key. For example:

   1 >>> class FooBar(object):
   2 ...     __storm_table__ = "foo_bar"
   3 ...     __storm_primary__ = ("foo_id", "bar_id")
   4 ...     foo_id = Int()
   5 ...     bar_id = Int()

Table of properties vs. python vs. database types

Property

Python

PostgreSQL

MySQL

SQLite

Bool

bool

BOOL

TINYINT(1)

anything(*)

Int

int, long

SERIAL, BIGSERIAL, SMALLINT, INT, BIGINT

TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT

anything(*)

Float

float

FLOAT, REAL, DOUBLE PRECISION

FLOAT, REAL, DOUBLE PRECISION

anything(*)

Decimal

Decimal

DECIMAL, NUMERIC, MONEY

DECIMAL, NUMERIC

anything(*)

Unicode

unicode

TEXT, VARCHAR, CHAR

TEXT, VARCHAR, CHAR

anything(*)

RawStr

str

BYTEA

BLOB, BINARY, VARBINARY

anything(*)

Pickle

any

BYTEA

BLOB, BINARY, VARBINARY

anything(*)

DateTime

datetime

TIMESTAMP

DATETIME, TIMESTAMP

anything(*)

Date

date

DATE

DATE

anything(*)

Time

time

TIME

TIME

anything(*)

TimeDelta

timedelta

INTERVAL

?

anything(*)

List

list

ARRAY[]

?

anything(*)

(*) SQLite won't enforce data types, so they just must be formatted properly.

References

One-to-one

Many-to-one

Many-to-many

Using on_remote

The Reference interface

The ReferenceSet interface

Expressions

Managing stores

Working with multiple threads

Using a global function

Using a base class

Creating a backend

Testing

It's easy to test that Storm features are working with new backends. There are base test classes in tests/store/database.py and tests/store/base.py which may be inherited by database-specific test cases. Look at other backends to get a feeling of how it works.

If these tests pass with a new backend, you may be pretty sure that Storm is working fine with the created backend.