Exemple #1
0
# Installation: pip install torndb
# Official doc: http://torndb.readthedocs.org/en/latest/
# Source: https://github.com/bdarnell/torndb/blob/master/torndb.py

from torndb import Connection

# Connect by IP address
db = Connection('127.0.0.1', 'database_name', user='******', password='******')
# Connect by IP address with port
db = Connection('127.0.0.1:1234', 'database_name', user='******', password='******')
# Connect by socket
db = Connection('/tmp/mysql.sock', 'database_name', user='******', password='******')
# Connection over SSH, open a SSH tunnel with
#     ssh -L 1234:localhost:3306 [email protected]
# then connect to 127.0.0.1:1234

# Retreive one object
post = db.get("SELECT * FROM posts LIMIT 1")

# Retreive several objects
for post in db.query("SELECT * FROM posts"):
    print post.title
  
# Insert one entry
db.execute("INSERT INTO posts (user_id, content) VALUES (%s, %s)", 12, "hello world !")

# Insert multiple entries
values = [(12, "hello"), (17, "world"), (22, "blah")]
db.executemany("INSERT INTO posts (user_id, content) VALUES (%s, %s)", values)
Exemple #2
0
    def run(self):
        # init our varying wrappers
        self.config = self.config_parser

        rabbit_queue = self.conf('rabbitqueue')
        rabbit_requeue = self.conf('rabbitrequeue')
        rabbitmq_url = self.conf('rabbitmq_url')

        client = puka.Client(rabbitmq_url)
        promise = client.connect()
        client.wait(promise)

        promise = client.queue_declare(queue=rabbit_queue, durable=True)
        client.wait(promise)
        if rabbit_requeue:
            promise = client.queue_declare(queue=rabbit_requeue, durable=True)
            client.wait(promise)
 
        consume_promise = client.basic_consume(queue=rabbit_queue, prefetch_count=1)

        host = self.conf('mysql_host')
        user = self.conf('mysql_user')
        password = self.conf('mysql_password')
        database = self.conf('mysql_database')
        table = self.conf('mysql_table')
        mysql_query_fields = self.conf('mysql_query_fields').split(",")
        mysql_key_field = self.conf('mysql_key_field')
        mysql_field_length = self.conf('mysql_field_length')
        mysql_insert_query = self.conf('mysql_insert_query')

        mysqldb = Connection(host, database, user=user, password=password)

        while True:
            try:
                result = client.wait(consume_promise)
                payload = json.loads(result['body'])
                key = payload[mysql_key_field]

                # Do some processing to get all they key/val pairs
                for k, v in payload['body'].iteritems():
                    values = []

                    for field in mysql_query_fields:
                        if isinstance(payload[field], basestring):
                            values.append(payload[field].strip())
                        else:
                            values.append(payload[field])
                    if k == 'body':
                        values.append(key)
                    else:
                        values.append(k)
                    values.append(v)
                    logger.debug(k)
                    if len(v) > 0 and len(v) < int(mysql_field_length):
                        try:
                            mysqldb.executemany(mysql_insert_query, [values])
                        except Exception as e:
                            logger.error(e)

                client.basic_ack(result)
                
                if rabbit_requeue:
                    promise = client.basic_publish(exchange='', routing_key=rabbit_requeue, body=result['body'])
                    client.wait(promise)
            except KeyboardInterrupt as e:
                logger.error(e)
                promise = client.close()
                client.wait(promise)
                mysqldb.close()
                raise