clean postgre single table
来源:互联网 发布:淘宝代销商品怎么下单 编辑:程序博客网 时间:2024/04/20 02:29
clean postgre single table
DBCleanByTableName.py
from Query import Queryimport timeclass DBCleanByTableName: vhm_id_range = 4294967295l _query = Query() _delete_tables = [] def clean_single_table(self, table_name, owner_id): """ Clean up single table by table_name and owner_id """ try: self._delete_tables = [] info('[{0}]Start delete data from table[{1}]...', self.__get_time(), table_name) self.__purge_singe_table_data(table_name, owner_id) info('[{0}]Delete table[{1}] sucessful! Constraint_tables : {2}', self.__get_time(), table_name, str(self._delete_tables)) except Exception,e: error('Delete data from table[{0}] fail!', table_name) raise e finally: self._query.close_pgdb_conn() def __purge_singe_table_data(self, table_name, owner_id): min_id = owner_id << 32 max_id = min_id + self.vhm_id_range constraint_tables = self._query.get_constraint_table(table_name) if not constraint_tables: self.__do_purge_data(table_name, min_id, max_id, owner_id) else: for item in constraint_tables: self._delete_tables.append(item[0]) self.__purge_singe_table_data(item[0], owner_id) self.__do_purge_data(table_name, min_id, max_id, owner_id) def __do_purge_data(self, table_name, min_id, max_id, owner_id): table_columns = self._query.get_column_by_table(table_name) if table_columns: if ['id'] in table_columns and ['owner_id'] in table_columns: column = 'id' else: column = table_columns[0].get(0) else: error("Don't get columns of {0}", table_name) raise delete_sql = 'DELETE FROM {0} where {1} between {2} and {3}'.format(table_name, column, min_id, max_id) self._query.delete_table_by_sql(delete_sql) def __get_time(self): return time.strftime('%Y-%m-%d %X', time.localtime())if __name__ == '__main__': result = DBCleanByTableName().clean_single_table('hm_nwk_plcy',102)
Query.py
import psycopg2import psycopg2.extrasclass Query: """ Connect pgdb and execute sql """ _env = Env() _db_host = _env.get('db.host') _db_port = _env.get('db.port') _db_user = _env.get('db.user.name') _db_password = _env.get('db.user.password') _db_name = _env.get('db.name') try: _pgdb_conn = psycopg2.connect(host=_db_host, dbname=_db_name, port=_db_port, user=_db_user, password=_db_password) _cursor = _pgdb_conn.cursor(cursor_factory=psycopg2.extras.DictCursor) info('[Get pgdb connect sucess!] Host : {0}, DB name : {1}', _db_host, _db_name) except Exception, e: error("conntect postgre database failed, ret = {0}", e) _cursor.close() _pgdb_conn.close() raise e get_constraint_table_sql = 'SELECT tc.table_name FROM information_schema.table_constraints AS tc JOIN information_schema.key_column_usage AS kcu ' \ 'ON tc.constraint_name = kcu.constraint_name JOIN information_schema.constraint_column_usage AS ccu ' \ 'ON ccu.constraint_name= tc.constraint_name WHERE constraint_type = \'FOREIGN KEY\' AND ccu.table_name=\'{0}\'' get_column_by_table_sql = 'SELECT a.attname FROM pg_class as c,pg_attribute as a where c.relname =\'{0}\' and a.attrelid = c.oid and a.attnum>0 ' def get_constraint_table(self, table_name): """ Get the constraint tables of table_name """ sql = self.get_constraint_table_sql.format(table_name) self._cursor.execute(sql) constraint_tables = self._cursor.fetchall() self._pgdb_conn.commit() return constraint_tables def get_column_by_table(self, table_name): """ Get all columns of table_name """ sql = self.get_column_by_table_sql.format(table_name) self._cursor.execute(sql) table_columns = self._cursor.fetchall() self._pgdb_conn.commit() return table_columns def delete_table_by_sql(self, delete_sql): self._cursor.execute(delete_sql) self._pgdb_conn.commit() def close_pgdb_conn(self): self._cursor.close() self._pgdb_conn.close() info('[Close pgdb connect sucess!] Host : {0}, DB name : {1}', self._db_host, self._db_name)
0 0
- clean postgre single table
- postgre drop所有table的语句
- Chapter 02 - Single-Table Queries
- Case: How To Clean Up Large Table
- Chapter 02 - Single-Table Queries - Exercises
- Chapter 02 - Single-Table Queries - Solutions
- On restoring a single table from mysqldump
- Optimizing MySQL queries on a single table
- single-table inheritance 单表继承
- clean
- 读书笔记:objc.io Issue #1 Clean table view code
- Testing View Controllers Lighter View Controllers Clean table view code
- 【整洁代码之设计篇】Clean Design 1 - Single Responsibility Principle理论和实践
- clean clean
- postgre constraints
- postgre索引
- postgre笔记
- postgre数据库
- Spring mvc+hibernate+freemarker(实战)
- 射频测试的重要性
- 次范德萨范德萨
- 关于系统前端开发的那些事
- Java之多线程内存可见性_2(volatile不能保证原子性)
- clean postgre single table
- iOS 数据持久化 -- Core Data (2)
- Django settings.py 中设置访问 MySQL 数据库【一种是直接在 settings.py 文件中直接写数据库信息,另一种是读文件获取数据库信息】
- bootstrap菜单、按钮及导航学习笔记5-2
- [干货]Android编程开发规范
- 如何让IIS支持php网页
- Git Reference---Basic Snapshotting
- NDK jni 加载静态库
- 【jQuery】使用one()方法绑定元素的一次性事件