mysql
select column_name, column_comment from information_schema.columns where table_name=’project’;
select deleted_flag from project where project_name=’sls-smoke-test-e09242b2e465bfc11c3f9f0e6214d2b4’;

escape_string 过滤, 防止sql注入

  1. def escape_sql_str(self, sql_str):
  2. try:
  3. import MySQLdb
  4. return MySQLdb.escape_string(sql_str)
  5. except ImportError:
  6. # import mysql.connector,you do not need to escape the data yourself, it does it automatically for you
  7. return sql_str
  8. s = simplejson.loads(old)
  9. new_sched = {
  10. 'interval': '%sm' % s['interval'],
  11. 'type': 'FixedRate',
  12. }
  13. return MySQLdb.escape_string(simplejson.dumps(new_sched))
  1. 这是用来过滤的
  2. https://stackoverflow.com/questions/7540803/escaping-strings-with-python-mysql-connector

日常操作

  1. 添加 key https://blog.csdn.net/arkblue/article/details/9070797
  2. https://blog.csdn.net/zm_bingxindan/article/details/23893391
  3. 修改表名,列名,类型
  4. https://blog.csdn.net/mouday/article/details/89447263

sql 单引号

当有 双引号 容易引发 插入格式错误 时, 用 单引号。

  1. INSERT INTO trigger_conf ( project_id, trigger_name, display_name, saved_search, search_detail, trigger_detail, operator_detail, action_detail, deleted_flag, update_time) VALUES (303,"savedsearch-1577963577214-14726"," ","savedsearch-1577963577214-14726", '{"from":"-120s","rolearn":"acs:ram::1857938651531441:role/aliyunlogreadrole","to":"now"}','{"count":2,"interval":5}','{"key":"c","opt":">","value":20}','{"detail":{"message":"110.249.208.* 网段爬虫卷土重来","webhook":"https://oapi.dingtalk.com/robot/send?access_token=70512313c87bf292a4f07f5212577262247306438a505c856f001dc7f984c102"},"type":"dingtalk"}',0 ,"2018-09-06 10:39:32");

三引号 造成 dict 外面 也有 单引号,这个 simplejson.load() 就出错

  1. [{u'update_time': datetime.datetime(2018, 9, 6, 10, 39, 32), u'operator_detail': u'\'{"key":"c","opt":">","value":"20"}\'', u'display_name': u' ', u'trigger_detail': u'\'{"count":"2","interval":"5"}\'',u'project_name':u'sls-smoke-test-e09242b2e465bfc11c3f9f0e6214d2b41577298610', u'create_time': datetime.datetime(2020, 1, 2, 19, 9, 10), u'search_detail': u'\'{"from":"-120s","rolearn":"acs:ram::1857938651531441:role/aliyunlogreadrole","to":"now"}\'', u'action_detail': u'\'{"detail":{"message":"110.249.208.* \u7f51\u6bb5\u722c\u866b\u5377\u571f\u91cd\u6765","webhook":"https://oapi.dingtalk.com/robot/send?access_token=70512313c87bf292a4f07f5212577262247306438a505c856f001dc7f984c102"},"type":"dingtalk"}\'', u'trigger_name': u'savedsearch-1577963577214-14726', u'project_id': 303, u'query_detail': u'\'{"displayName":"hdhahsa","topic":"","logstore":"test-o","searchQuery":"* | select status, COUNT(*) as c GROUP BY status","tokenQuery":"* | select status, COUNT(*) as c GROUP BY status","tokens":[],"savedsearchName":"savedsearch-1577963577214-14726"}\''}] u'\'{"count":"2","interval":"5"}\''

清空表

  1. delete from 表名;

truncate table 表名;
不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。
delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表

mysql 容器

通常使用

  1. root@vm010025018250 /cloud/app/sls-backend-server/ToolService#/init_db/current]
  2. #cat init_scmc_mysql.config
  3. {
  4. "db_host": "slsscmc.mysql.minirds.intra.env25.shuguang.com",
  5. "db_port": "3017",
  6. "db_user": "slsscmc",
  7. "db_pwd": "yoqiviksNAuesp01",
  8. "db_database": "slsscmc"
  9. }
  10. [root@vm010025018250 /cloud/app/sls-backend-server/ToolService#/init_db/current]
  11. #mysql -P 3017 -h slsscmc.mysql.minirds.intra.env25.shuguang.com -u slsscmc slsscmc -pyoqiviksNAuesp01
  12. Reading table information for completion of table and column names
  13. You can turn off this feature to get a quicker startup with -A
  14. Welcome to the MySQL monitor. Commands end with ; or \g.
  15. Your MySQL connection id is 5514557
  16. Server version: 5.6.46-log Source distribution
  17. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  18. mysql>
  19. 容器
  20. ## bash create db
  21. docker run -d --rm -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.7
  22. docker run -i --rm mysql mysql -h 30.43.72.6 -P 3306 -u root -p123456 -e 'show databases;'
  23. mysql -h 30.43.72.6 -P 3306 -u root -p123456 -e 'create database if not exists test_db;'
  24. mysql -u root -h 30.43.72.6 test_db -p123456
  25. https://segmentfault.com/a/1190000007025543
  26. sql update-on-duplicate-key-update
  27. https://www.mysqltutorial.org/mysql-insert-or-update-on-duplicate-key-update/
  28. SELECT t.project_id as project_id,
  29. t.trigger_name as trigger_name,
  30. t.display_name as display_name,
  31. t.search_detail as search_detail,
  32. t.trigger_detail as trigger_detail,
  33. t.operator_detail as operator_detail,
  34. t.action_detail as action_detail,
  35. t.update_time as update_time,
  36. s.search_detail as query_detail,
  37. s.ctime as create_time,
  38. p.project_name as project_name
  39. FROM trigger_conf AS t, savedsearch AS s, project AS p
  40. WHERE t.deleted_flag=0 AND s.deleted_flag=0 AND t.saved_search=s.search_name AND p.deleted_flag=0
  41. AND t.project_id=s.project_id and t.project_id=p.project_id;

python-mysql-connector

  1. https://www.runoob.com/python3/python-mysql-connector.html
  1. #!/home/tops/bin/python
  2. # -*- coding:utf-8 -*-
  3. from ..command_executor import ExecCmdException, exec_cmd
  4. from ..logging_helper import get_logger
  5. class MySQLExecutor(object):
  6. DOCKER_PREFIX = "docker run -i --rm mysql"
  7. CREATE_DATABASE_TMPL = "mysql -h {host} -P {port} -u {user} -p{pwd} -e " \
  8. "'create database if not exists {database};'"
  9. CREATE_DATABASE_USING_DOCKER_TMPL = "%s %s" % (DOCKER_PREFIX,
  10. CREATE_DATABASE_TMPL)
  11. EXECUTE_SQL_FILE_TMPL = "mysql -h {host} -P {port} -u {user} -p{pwd} {database} < {sql_file}"
  12. EXECUTE_SQL_FILE_USING_DOCKER_TMPL = "%s %s" % (DOCKER_PREFIX,
  13. EXECUTE_SQL_FILE_TMPL)
  14. def __init__(self,
  15. host,
  16. port,
  17. user,
  18. pwd,
  19. database,
  20. using_docker_flag=False):
  21. self.logger = get_logger()
  22. self.host = host
  23. self.port = port
  24. self.user = user
  25. self.pwd = pwd
  26. self.database = database
  27. self.using_docker_flag = using_docker_flag
  28. def create_database_if_not_exists(self):
  29. if not self.using_docker_flag:
  30. cmd = self.CREATE_DATABASE_TMPL.format(
  31. host=self.host,
  32. port=self.port,
  33. user=self.user,
  34. pwd=self.pwd,
  35. database=self.database,
  36. )
  37. else:
  38. cmd = self.CREATE_DATABASE_USING_DOCKER_TMPL.format(
  39. host=self.host,
  40. port=self.port,
  41. user=self.user,
  42. pwd=self.pwd,
  43. database=self.database,
  44. )
  45. exec_cmd(cmd)
  46. def execute_sql_file(self, sql_file):
  47. if not self.using_docker_flag:
  48. cmd = self.EXECUTE_SQL_FILE_TMPL.format(host=self.host,
  49. port=self.port,
  50. user=self.user,
  51. pwd=self.pwd,
  52. database=self.database,
  53. sql_file=sql_file)
  54. else:
  55. cmd = self.EXECUTE_SQL_FILE_USING_DOCKER_TMPL.format(
  56. host=self.host,
  57. port=self.port,
  58. user=self.user,
  59. pwd=self.pwd,
  60. database=self.database,
  61. sql_file=sql_file)
  62. try:
  63. exec_cmd(cmd)
  64. except ExecCmdException as e:
  65. # Table already exists
  66. if "ERROR 1050" in e.stderr:
  67. self.logger.warning(e.stderr)
  68. else:
  69. raise e
  70. def execute_read_sql(self, sql):
  71. conn = self.build_conn()
  72. try:
  73. cursor = conn.cursor()
  74. cursor.execute(sql)
  75. return cursor.fetchall()
  76. finally:
  77. conn.close()
  78. def escape_sql_str(self, sql_str):
  79. try:
  80. import MySQLdb
  81. return MySQLdb.escape_string(sql_str)
  82. except ImportError:
  83. # import mysql.connector,you do not need to escape the data yourself, it does it automatically for you
  84. return sql_str
  85. def execute_read_sql_dict(self, sql):
  86. try:
  87. import MySQLdb
  88. conn = MySQLdb.connect(host=self.host,
  89. port=int(self.port),
  90. user=self.user,
  91. passwd=self.pwd,
  92. db=self.database)
  93. try:
  94. cursor = conn.cursor(MySQLdb.cursors.DictCursor)
  95. cursor.execute(sql)
  96. return cursor.fetchall()
  97. finally:
  98. conn.close()
  99. except ImportError:
  100. import mysql.connector
  101. conn = mysql.connector.connect(host=self.host,
  102. port=int(self.port),
  103. user=self.user,
  104. passwd=self.pwd,
  105. db=self.database)
  106. try:
  107. cursor = conn.cursor(dictionary=True)
  108. cursor.execute(sql)
  109. return cursor.fetchall()
  110. finally:
  111. conn.close()
  112. @classmethod
  113. def execute_read_sql_with_conn(cls, conn, sql):
  114. cursor = conn.cursor()
  115. cursor.execute(sql)
  116. return cursor.fetchall()
  117. def execute_write_sql(self, sql):
  118. conn = self.build_conn()
  119. try:
  120. cursor = conn.cursor()
  121. cursor.execute(sql)
  122. conn.commit()
  123. except Exception as e:
  124. conn.rollback()
  125. raise e
  126. finally:
  127. conn.close()
  128. @classmethod
  129. def execute_write_sql_with_conn(cls, conn, sql):
  130. cursor = conn.cursor()
  131. cursor.execute(sql)
  132. conn.commit()
  133. def build_conn(self):
  134. try:
  135. import MySQLdb
  136. return MySQLdb.connect(host=self.host,
  137. port=int(self.port),
  138. user=self.user,
  139. passwd=self.pwd,
  140. db=self.database)
  141. except ImportError:
  142. import mysql.connector
  143. return mysql.connector.connect(host=self.host,
  144. port=int(self.port),
  145. user=self.user,
  146. passwd=self.pwd,
  147. db=self.database)
  148. for mac
  149. MySQLDB
  150. for linux
  151. https://www.runoob.com/python/python-mysql.html
  152. import MySQLdb
  153. mysql_conn = MySQLdb.connect(host=mysql_host,
  154. user=mysql_user,
  155. passwd=mysql_passwd,
  156. db=mysql_db,
  157. port=mysql_port,
  158. charset='utf8') # 打开数据库连接
  159. mysql_cursor = mysql_conn.cursor(MySQLdb.cursors.DictCursor)
  160. mysql_cursor.execute(sql)# 使用execute方法执行SQL语句
  161. results = mysql_cursor.fetchall()# 使用 fetchone() 方法获all数据 execute 执行后的结果。)
  162. mysql_conn.commit()# 提交到数据库执行
  163. mysql_cursor.close()
  164. mysql_conn.close() # 关闭数据库连接

dict_返回

  1. http://cn.voidcc.com/question/p-hkaldovs-bdu.html
  2. https://stackoverflow.com/questions/22769873/python-mysql-connector-dictcursor