コード例 #1
0
ファイル: query.py プロジェクト: fcoury/autumn
 def extract_condition_keys(self):
     if len(self.conditions):
         conditions = []
         for k in self.conditions:
             if isinstance(self.conditions[k], list):
                 conditions.append("%s IN %s" % (escape(k), "(%s)" % str(self.conditions[k])[1:-1]))
             else:
                 conditions.append("%s=%s" % (escape(k), self.db.conn.placeholder))
             
         return 'WHERE %s' % ' AND '.join(conditions)
コード例 #2
0
ファイル: allPythonContent.py プロジェクト: Mondego/pyreco
    def _update(self):
        "Uses SQL UPDATE to update record"
        query = "UPDATE %s SET " % self.Meta.table_safe
        query += ", ".join(["%s = %s" % (escape(f), self.db.conn.placeholder) for f in self._changed])
        query += " WHERE %s = %s " % (escape(self.Meta.pk), self.db.conn.placeholder)

        values = [getattr(self, f) for f in self._changed]
        values.append(self._get_pk())

        cursor = Query.raw_sql(query, values, self.db)
コード例 #3
0
    def _update(self):
        'Uses SQL UPDATE to update record'
        query = 'UPDATE %s SET ' % self.Meta.table_safe
        query += ', '.join([
            '%s = %s' % (escape(f), self.db.conn.placeholder)
            for f in self._changed
        ])
        query += ' WHERE %s = %s ' % (escape(
            self.Meta.pk), self.db.conn.placeholder)

        values = [getattr(self, f) for f in self._changed]
        values.append(self._get_pk())

        cursor = Query.raw_sql(query, values, self.db)
コード例 #4
0
ファイル: query.py プロジェクト: randy-ran/helloworld
 def extract_condition_keys(self):
     if len(self.conditions):
         return 'WHERE %s' % ' AND '.join(
             "%s%s%s" %
             (escape(k.split(' ')[0]),
              (k.split(' ')[1] if len(k.split(' ')) > 1 else '='),
              self.db.conn.placeholder) for k in self.conditions)
コード例 #5
0
ファイル: allPythonContent.py プロジェクト: Mondego/pyreco
    def __new__(cls, name, bases, attrs):
        if name == "Model":
            return super(ModelBase, cls).__new__(cls, name, bases, attrs)

        new_class = type.__new__(cls, name, bases, attrs)

        if not getattr(new_class, "Meta", None):
            new_class.Meta = Empty

        if not getattr(new_class.Meta, "table", None):
            new_class.Meta.table = name.lower()
        new_class.Meta.table_safe = escape(new_class.Meta.table)

        # Assume id is the default
        if not getattr(new_class.Meta, "pk", None):
            new_class.Meta.pk = "id"

        # Create function to loop over iterable validations
        for k, v in getattr(new_class.Meta, "validations", {}).iteritems():
            if isinstance(v, (list, tuple)):
                new_class.Meta.validations[k] = ValidatorChain(*v)

        # See cursor.description
        # http://www.python.org/dev/peps/pep-0249/
        if not hasattr(new_class, "db"):
            new_class.db = autumn_db
        db = new_class.db
        q = Query.raw_sql("SELECT * FROM %s LIMIT 1" % new_class.Meta.table_safe, db=new_class.db)
        new_class._fields = [f[0] for f in q.description]

        cache.add(new_class)
        return new_class
コード例 #6
0
    def __new__(cls, name, bases, attrs):
        if name == 'Model':
            return super(ModelBase, cls).__new__(cls, name, bases, attrs)

        new_class = type.__new__(cls, name, bases, attrs)

        if not getattr(new_class, 'Meta', None):
            new_class.Meta = Empty

        if not getattr(new_class.Meta, 'table', None):
            new_class.Meta.table = name.lower()
        new_class.Meta.table_safe = escape(new_class.Meta.table)

        # Assume id is the default
        if not getattr(new_class.Meta, 'pk', None):
            new_class.Meta.pk = 'id'

        # Create function to loop over iterable validations
        for k, v in getattr(new_class.Meta, 'validations', {}).iteritems():
            if isinstance(v, (list, tuple)):
                new_class.Meta.validations[k] = ValidatorChain(*v)

        # See cursor.description
        # http://www.python.org/dev/peps/pep-0249/
        if not hasattr(new_class, "db"):
            new_class.db = autumn_db
        db = new_class.db
        q = Query.raw_sql('SELECT * FROM %s LIMIT 1' %
                          new_class.Meta.table_safe,
                          db=new_class.db)
        new_class._fields = [f[0] for f in q.description]

        cache.add(new_class)
        return new_class
コード例 #7
0
ファイル: query.py プロジェクト: Acidburn0zzz/helloworld
 def order_by(self, field, direction='ASC'):
     field = field.split(',')
     escaped_fields = ""
     for f in field:
       if escaped_fields:
         escaped_fields += ","
       escaped_fields += escape(f)
     self.order = 'ORDER BY %s %s' % (escaped_fields, direction)
     return self
コード例 #8
0
ファイル: query.py プロジェクト: randy-ran/helloworld
 def order_by(self, field, direction='ASC'):
     field = field.split(',')
     escaped_fields = ""
     for f in field:
         if escaped_fields:
             escaped_fields += ","
         escaped_fields += escape(f)
     self.order = 'ORDER BY %s %s' % (escaped_fields, direction)
     return self
コード例 #9
0
ファイル: allPythonContent.py プロジェクト: Mondego/pyreco
    def _new_save(self):
        "Uses SQL INSERT to create new record"
        # if pk field is set, we want to insert it too
        # if pk field is None, we want to auto-create it from lastrowid
        auto_pk = 1 and (self._get_pk() is None) or 0
        fields = [escape(f) for f in self._fields if f != self.Meta.pk or not auto_pk]
        query = "INSERT INTO %s (%s) VALUES (%s)" % (
            self.Meta.table_safe,
            ", ".join(fields),
            ", ".join([self.db.conn.placeholder] * len(fields)),
        )
        values = [getattr(self, f, None) for f in self._fields if f != self.Meta.pk or not auto_pk]
        cursor = Query.raw_sql(query, values, self.db)

        if self._get_pk() is None:
            self._set_pk(cursor.lastrowid)
        return True
コード例 #10
0
ファイル: model.py プロジェクト: fcoury/autumn
    def __new__(cls, name, bases, attrs):
        def __pluralize(name):
            return name + 's'
            
        def __to_table(name):
            table = name[0].lower()
            for i in range(len(name)-1):
                if name[i+1].isupper():
                    table += '_'
                table += name[i+1].lower()
            return table

        if name == 'Model':
            return super(ModelBase, cls).__new__(cls, name, bases, attrs)
            
        new_class = type.__new__(cls, name, bases, attrs)
        
        if not getattr(new_class, 'Meta', None):
            new_class.Meta = Empty
        
        new_class.Meta.raw_name = __to_table(name)
        if not getattr(new_class.Meta, 'table', None):
            new_class.Meta.table = __pluralize(new_class.Meta.raw_name)
        new_class.Meta.table_safe = escape(new_class.Meta.table)
        
        # Assume id is the default 
        if not getattr(new_class.Meta, 'pk', None):
            new_class.Meta.pk = 'id'
        
        # Create function to loop over iterable validations
        for k, v in getattr(new_class.Meta, 'validations', {}).iteritems():
            if isinstance(v, (list, tuple)):
                new_class.Meta.validations[k] = ValidatorChain(*v)
        
        # See cursor.description
        # http://www.python.org/dev/peps/pep-0249/
        if not hasattr(new_class, "db"):
            new_class.db = autumn_db
        db = new_class.db
        q = Query.raw_sql('SELECT * FROM %s LIMIT 1' % new_class.Meta.table_safe, db=new_class.db)
        new_class._fields = [f[0] for f in q.description]
        
        cache.add(new_class)
        return new_class
コード例 #11
0
    def _new_save(self):
        'Uses SQL INSERT to create new record'
        # if pk field is set, we want to insert it too
        # if pk field is None, we want to auto-create it from lastrowid
        auto_pk = 1 and (self._get_pk() is None) or 0
        fields = [
            escape(f) for f in self._fields if f != self.Meta.pk or not auto_pk
        ]
        query = 'INSERT INTO %s (%s) VALUES (%s)' % (
            self.Meta.table_safe, ', '.join(fields), ', '.join(
                [self.db.conn.placeholder] * len(fields)))
        values = [
            getattr(self, f, None) for f in self._fields
            if f != self.Meta.pk or not auto_pk
        ]
        cursor = Query.raw_sql(query, values, self.db)

        if self._get_pk() is None:
            self._set_pk(cursor.lastrowid)
        return True
コード例 #12
0
ファイル: allPythonContent.py プロジェクト: Mondego/pyreco
 def extract_condition_keys(self):
     if len(self.conditions):
         return "WHERE %s" % " AND ".join("%s=%s" % (escape(k), self.db.conn.placeholder) for k in self.conditions)
コード例 #13
0
ファイル: allPythonContent.py プロジェクト: Mondego/pyreco
 def order_by(self, field, direction="ASC"):
     self.order = "ORDER BY %s %s" % (escape(field), direction)
     return self
コード例 #14
0
ファイル: query.py プロジェクト: ChironJ/autumn
 def order_by(self, field, direction='ASC'):
     self.order = 'ORDER BY %s %s' % (escape(field), direction)
     return self
コード例 #15
0
 def extract_condition_keys(self):
     if len(self.conditions):
         return 'WHERE %s' % ' AND '.join(
             "%s=%s" % (escape(k), self.db.conn.placeholder)
             for k in self.conditions)
コード例 #16
0
 def order_by(self, field, direction='ASC'):
     self.order = 'ORDER BY %s %s' % (escape(field), direction)
     return self
コード例 #17
0
ファイル: query.py プロジェクト: Acidburn0zzz/helloworld
 def extract_condition_keys(self):
     if len(self.conditions):
         return 'WHERE %s' % ' AND '.join("%s%s%s" % (escape(k.split(' ')[0]), (k.split(' ')[1] if len(k.split(' ')) > 1 else '='), self.db.conn.placeholder) for k in self.conditions)
コード例 #18
0
ファイル: allPythonContent.py プロジェクト: Mondego/pyreco
    def testmodel(self):
        # Create tables

        ### MYSQL ###
        #
        # DROP TABLE IF EXISTS author;
        # CREATE TABLE author (
        #     id INT(11) NOT NULL auto_increment,
        #     first_name VARCHAR(40) NOT NULL,
        #     last_name VARCHAR(40) NOT NULL,
        #     bio TEXT,
        #     PRIMARY KEY (id)
        # );
        # DROP TABLE IF EXISTS books;
        # CREATE TABLE books (
        #     id INT(11) NOT NULL auto_increment,
        #     title VARCHAR(255),
        #     author_id INT(11),
        #     FOREIGN KEY (author_id) REFERENCES author(id),
        #     PRIMARY KEY (id)
        # );

        ### SQLITE ###
        #
        # DROP TABLE IF EXISTS author;
        # DROP TABLE IF EXISTS books;
        # CREATE TABLE author (
        #   id INTEGER PRIMARY KEY AUTOINCREMENT,
        #   first_name VARCHAR(40) NOT NULL,
        #   last_name VARCHAR(40) NOT NULL,
        #   bio TEXT
        # );
        # CREATE TABLE books (
        #   id INTEGER PRIMARY KEY AUTOINCREMENT,
        #   title VARCHAR(255),
        #   author_id INT(11),
        #   FOREIGN KEY (author_id) REFERENCES author(id)
        # );

        for table in ("author", "books"):
            Query.raw_sql("DELETE FROM %s" % escape(table))

        # Test Creation
        james = Author(first_name="James", last_name="Joyce")
        james.save()

        kurt = Author(first_name="Kurt", last_name="Vonnegut")
        kurt.save()

        tom = Author(first_name="Tom", last_name="Robbins")
        tom.save()

        Book(title="Ulysses", author_id=james.id).save()
        Book(title="Slaughter-House Five", author_id=kurt.id).save()
        Book(title="Jitterbug Perfume", author_id=tom.id).save()
        slww = Book(title="Still Life with Woodpecker", author_id=tom.id)
        slww.save()

        # Test ForeignKey
        self.assertEqual(slww.author.first_name, "Tom")

        # Test OneToMany
        self.assertEqual(len(list(tom.books)), 2)

        kid = kurt.id
        del (james, kurt, tom, slww)

        # Test retrieval
        b = Book.get(title="Ulysses")[0]

        a = Author.get(id=b.author_id)[0]
        self.assertEqual(a.id, b.author_id)

        a = Author.get(id=b.id)[:]
        self.assert_(isinstance(a, list))

        # Test update
        new_last_name = "Vonnegut, Jr."
        a = Author.get(id=kid)[0]
        a.last_name = new_last_name
        a.save()

        a = Author.get(kid)
        self.assertEqual(a.last_name, new_last_name)

        # Test count
        self.assertEqual(Author.get().count(), 3)

        self.assertEqual(len(Book.get()[1:4]), 3)

        # Test delete
        a.delete()
        self.assertEqual(Author.get().count(), 2)

        # Test validation
        a = Author(first_name="", last_name="Ted")
        try:
            a.save()
            raise Exception("Validation not caught")
        except Model.ValidationError:
            pass

        # Test defaults
        a.first_name = "Bill and"
        a.save()
        self.assertEqual(a.bio, "No bio available")

        try:
            Author(first_name="I am a", last_name="BadGuy!").save()
            raise Exception("Validation not caught")
        except Model.ValidationError:
            pass
コード例 #19
0
    def testmodel(self):
        # Create tables

        ### MYSQL ###
        #
        # DROP TABLE IF EXISTS author;
        # CREATE TABLE author (
        #     id INT(11) NOT NULL auto_increment,
        #     first_name VARCHAR(40) NOT NULL,
        #     last_name VARCHAR(40) NOT NULL,
        #     bio TEXT,
        #     PRIMARY KEY (id)
        # );
        # DROP TABLE IF EXISTS books;
        # CREATE TABLE books (
        #     id INT(11) NOT NULL auto_increment,
        #     title VARCHAR(255),
        #     author_id INT(11),
        #     FOREIGN KEY (author_id) REFERENCES author(id),
        #     PRIMARY KEY (id)
        # );

        ### SQLITE ###
        #
        # DROP TABLE IF EXISTS author;
        # DROP TABLE IF EXISTS books;
        # CREATE TABLE author (
        #   id INTEGER PRIMARY KEY AUTOINCREMENT,
        #   first_name VARCHAR(40) NOT NULL,
        #   last_name VARCHAR(40) NOT NULL,
        #   bio TEXT
        # );
        # CREATE TABLE books (
        #   id INTEGER PRIMARY KEY AUTOINCREMENT,
        #   title VARCHAR(255),
        #   author_id INT(11),
        #   FOREIGN KEY (author_id) REFERENCES author(id)
        # );

        for table in ('author', 'books'):
            Query.raw_sql('DELETE FROM %s' % escape(table))

        # Test Creation
        james = Author(first_name='James', last_name='Joyce')
        james.save()

        kurt = Author(first_name='Kurt', last_name='Vonnegut')
        kurt.save()

        tom = Author(first_name='Tom', last_name='Robbins')
        tom.save()

        Book(title='Ulysses', author_id=james.id).save()
        Book(title='Slaughter-House Five', author_id=kurt.id).save()
        Book(title='Jitterbug Perfume', author_id=tom.id).save()
        slww = Book(title='Still Life with Woodpecker', author_id=tom.id)
        slww.save()

        # Test ForeignKey
        self.assertEqual(slww.author.first_name, 'Tom')

        # Test OneToMany
        self.assertEqual(len(list(tom.books)), 2)

        kid = kurt.id
        del (james, kurt, tom, slww)

        # Test retrieval
        b = Book.get(title='Ulysses')[0]

        a = Author.get(id=b.author_id)[0]
        self.assertEqual(a.id, b.author_id)

        a = Author.get(id=b.id)[:]
        self.assert_(isinstance(a, list))

        # Test update
        new_last_name = 'Vonnegut, Jr.'
        a = Author.get(id=kid)[0]
        a.last_name = new_last_name
        a.save()

        a = Author.get(kid)
        self.assertEqual(a.last_name, new_last_name)

        # Test count
        self.assertEqual(Author.get().count(), 3)

        self.assertEqual(len(Book.get()[1:4]), 3)

        # Test delete
        a.delete()
        self.assertEqual(Author.get().count(), 2)

        # Test validation
        a = Author(first_name='', last_name='Ted')
        try:
            a.save()
            raise Exception('Validation not caught')
        except Model.ValidationError:
            pass

        # Test defaults
        a.first_name = 'Bill and'
        a.save()
        self.assertEqual(a.bio, 'No bio available')

        try:
            Author(first_name='I am a', last_name='BadGuy!').save()
            raise Exception('Validation not caught')
        except Model.ValidationError:
            pass