Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import mysql.connector
- database = mysql.connector.connect(
- user = maps,
- password = pwd,
- host = args.connect
- )
- #SETUP DATABASE AND PROCEDURES DEFINITIONS FOR FUNCTIONS BELOW
- cursor = setup_database(database, args)
- setup_procedures(cursor, args.table, database)
- import mysql.connector
- def setup_database(database, args):
- #CREATING DATABASE
- cursor = database.cursor()
- cursor.execute('DROP DATABASE IF EXISTS ' + args.db)
- database.commit()
- cursor.execute('CREATE DATABASE ' + args.db
- + ' CHARACTER SET ' + args.char + ' COLLATE ' + args.collation
- )
- database.commit()
- cursor.execute('USE ' + args.db)
- database.commit()
- cursor.execute('DROP TABLE IF EXISTS ' + args.table)
- database.commit()
- #MAXIMUM SIZE OF TABLE = 64 TERRABYTES, SHOULD BE ENOUGH...
- cursor.execute('CREATE TABLE ' + args.table + ''' (
- content_id BIGINT AUTO_INCREMENT PRIMARY KEY,
- content TEXT NOT NULL,
- lft BIGINT NOT NULL,
- rgt BIGINT NOT NULL
- )ENGINE=InnoDB'''
- )
- database.commit()
- return cursor;
- import mysql.connector
- __all__ = ['setup_procedures']
- def setup_procedures(cursor, table, database):
- #ADD NODE adds node to specified parent and returns childs_id
- cursor.execute('''
- DROP PROCEDURE IF EXISTS addnode;
- CREATE DEFINER = CURRENT_USER PROCEDURE addnode (
- IN parent_id BIGINT,
- IN text_content TEXT
- )
- BEGIN
- DECLARE parent_lft BIGINT DEFAULT NULL;
- DECLARE parent_rgt BIGINT DEFAULT NULL;
- DECLARE temp BIGINT DEFAULT NULL;
- SELECT content_id, lft, rgt INTO parent_id, parent_lft, parent_rgt
- FROM '''+ table +
- ''' WHERE content_id = parent_id;
- -- inserting node:
- START TRANSACTION;
- UPDATE ''' + table + ''' SET lft = CASE WHEN lft > parent_rgt THEN lft + 2 ELSE lft END
- ,rgt = CASE WHEN rgt >= parent_rgt THEN rgt + 2 ELSE rgt END
- WHERE rgt >= parent_rgt;
- INSERT INTO ''' + table + ''' (content, lft, rgt)
- VALUES (text_content, parent_rgt , parent_rgt + 1);
- SELECT LAST_INSERT_ID() INTO temp;
- COMMIT;
- -- return value
- SELECT temp AS child_id;
- END
- ''',
- multi=True
- )
- database.commit()
- #id is int, root is xml object, root.text is string, cursor is database's #cursor
- def recursive_read(root, id, cursor):
- if root.text is not None:
- cursor.callproc('addnode', (id, root.text))
- id+=1
- for elem in root.getchildren():
- recursive_read(elem, id, cursor)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement