upgrade.py 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # **************************************************************************
  4. # Copyright © 2017 jianglin
  5. # File Name: upgrade.py
  6. # Author: jianglin
  7. # Email: xiyang0807@gmail.com
  8. # Created: 2017-03-29 23:28:43 (CST)
  9. # Last Update:星期四 2017-5-4 11:22:48 (CST)
  10. # By:
  11. # Description:
  12. # **************************************************************************
  13. from datetime import datetime
  14. from sqlalchemy import create_engine
  15. from sqlalchemy.orm import sessionmaker
  16. engine1 = create_engine('postgresql://postgres:password@localhost/forums1')
  17. session1 = sessionmaker(bind=engine1)()
  18. engine2 = create_engine('postgresql://postgres:password@localhost/forums')
  19. session2 = sessionmaker(bind=engine2)()
  20. def upgrade_board():
  21. _boards = session1.execute('select * from boards;')
  22. for i in _boards:
  23. print(i)
  24. board = session2.execute(
  25. "insert into boards (id,name,description) values (:1,:2,:3) RETURNING *",
  26. {
  27. '1': i.id,
  28. '2': i.board,
  29. '3': i.description
  30. })
  31. session2.commit()
  32. _parent_boards = session1.execute(
  33. 'select parent_board from boards group by parent_board;')
  34. n = 9
  35. for i in _parent_boards:
  36. p = session2.execute(
  37. "insert into boards (id,name,description) values (:1,:2,:3) RETURNING *",
  38. {
  39. '1': n,
  40. '2': i.parent_board,
  41. '3': i.parent_board
  42. })
  43. session2.commit()
  44. p = p.fetchone()
  45. _boards = session1.execute(
  46. "select * from boards where parent_board = :parent_board", {
  47. "parent_board": p.name
  48. })
  49. for j in _boards:
  50. q = session2.execute(
  51. "update boards set parent_id = :1 where id = :2", {
  52. '1': p.id,
  53. '2': j.id
  54. })
  55. session2.commit()
  56. n += 1
  57. def upgrade_reply():
  58. _replies = session1.execute('select * from replies')
  59. for i in _replies:
  60. print(i)
  61. reply = session2.execute(
  62. 'insert into replies (id,content,created_at,updated_at,author_id,topic_id) values (:1,:2,:3,:4,:5,:6)',
  63. {
  64. '1': i.id,
  65. '2': i.content,
  66. '3': i.publish,
  67. '4': i.publish,
  68. '5': i.author_id,
  69. '6': i.topic_id
  70. })
  71. session2.commit()
  72. def upgrade_topic():
  73. _topics = session1.execute('select * from topics')
  74. for t in _topics:
  75. print(t)
  76. content_type = '1' if t.is_markdown else '0'
  77. topic = session2.execute(
  78. "insert into topics (id,title,content,content_type,created_at,updated_at,\
  79. is_good,is_top,author_id,board_id) values (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10) RETURNING *",
  80. {
  81. '1': t.id,
  82. '2': t.title,
  83. '3': t.content,
  84. '4': content_type,
  85. '5': t.publish,
  86. '6': t.updated,
  87. '7': t.is_good,
  88. '8': t.is_top,
  89. '9': t.author_id,
  90. '10': t.board_id
  91. })
  92. session2.commit()
  93. def upgrade_user():
  94. results = session1.execute('select * from users;')
  95. for i in results:
  96. print(i)
  97. p = session2.execute(
  98. "insert into users (id,username,password,email,is_confirmed,\
  99. is_superuser,register_time) values (:1,:2,:3,:4,:5,:6,:7) RETURNING *",
  100. {
  101. '1': i.id,
  102. '2': i.username,
  103. '3': i.password,
  104. '4': i.email,
  105. '5': i.is_confirmed,
  106. '6': i.is_superuser,
  107. '7': i.register_time
  108. })
  109. session2.commit()
  110. p = p.fetchone()
  111. _info = session1.execute('select * from userinfor where id = :id', {
  112. 'id': i.infor_id
  113. })
  114. _info = _info.fetchone()
  115. info = session2.execute(
  116. "insert into userinfo (id,avatar,school,word,introduce,user_id) values (:1,:2,:3,:4,:5,:6) RETURNING *",
  117. {
  118. '1': _info.id,
  119. '2': _info.avatar or '',
  120. '3': _info.school or '',
  121. '4': _info.word or '',
  122. '5': _info.introduce or '',
  123. '6': p.id
  124. })
  125. session2.commit()
  126. _setting = session1.execute('select * from usersetting where id = :id',
  127. {
  128. 'id': i.setting_id
  129. })
  130. _setting = _setting.fetchone()
  131. setting = session2.execute(
  132. "insert into usersetting (id,online_status,topic_list,rep_list,\
  133. ntb_list,collect_list,locale,timezone,user_id) values (:1,:2,:3,:4,:5,:6,:7,:8,:9) RETURNING *",
  134. {
  135. '1': _setting.id,
  136. '2': _setting.online_status,
  137. '3': _setting.topic_list,
  138. '4': _setting.rep_list,
  139. '5': _setting.ntb_list,
  140. '6': _setting.collect_list,
  141. '7': _setting.locale,
  142. '8': _setting.timezone,
  143. '9': p.id
  144. })
  145. session2.commit()
  146. def upgrade_tags():
  147. _tags = session1.execute('select * from tags;')
  148. for i in _tags:
  149. p = session2.execute(
  150. "insert into tags (id,name,description) values (:1,:2,:3) RETURNING *",
  151. {
  152. '1': i.id,
  153. '2': i.tagname,
  154. '3': i.summary or i.tagname
  155. })
  156. session2.commit()
  157. _tag_parents = session1.execute('select * from tags_parents;')
  158. for i in _tag_parents:
  159. session2.execute('update tags set parent_id = :1 where id = :2', {
  160. '1': i.parent_id,
  161. '2': i.tag_id
  162. })
  163. session2.commit()
  164. _tag_topics = session1.execute('select * from tag_topic;')
  165. for i in _tag_topics:
  166. p = session2.execute(
  167. "insert into tag_topic (tag_id,topic_id) values (:1,:2) RETURNING *",
  168. {
  169. '1': i.tags_id,
  170. '2': i.topics_id,
  171. })
  172. session2.commit()
  173. def upgrade_collect():
  174. _collects = session1.execute('select * from collects;')
  175. for i in _collects:
  176. print(i)
  177. p = session2.execute(
  178. "insert into collects (id,name,description,is_hidden,author_id,created_at,updated_at) values (:1,:2,:3,:4,:5,:6,:7) RETURNING *",
  179. {
  180. '1': i.id,
  181. '2': i.name,
  182. '3': i.description,
  183. '4': i.is_privacy,
  184. '5': i.author_id,
  185. '6': datetime.now(),
  186. '7': datetime.now()
  187. })
  188. session2.commit()
  189. _collect_topics = session1.execute('select * from collect_topic;')
  190. for i in _collect_topics:
  191. p = session2.execute(
  192. "insert into topic_collect (collect_id,topic_id) values (:1,:2) RETURNING *",
  193. {
  194. '1': i.collect_id,
  195. '2': i.topic_id
  196. })
  197. session2.commit()
  198. def upgrade_like():
  199. _likes = session1.execute('select * from likes;')
  200. for i in _likes:
  201. p = session2.execute(
  202. "insert into reply_liker (reply_id,liker_id) values (:1,:2) RETURNING *",
  203. {
  204. '1': i.reply_id,
  205. '2': i.author_id
  206. })
  207. session2.commit()
  208. def upgrade_follow():
  209. _followers = session1.execute('select * from follows;')
  210. for i in _followers:
  211. print(i)
  212. if i.following_user_id:
  213. p = session2.execute(
  214. "insert into user_follower (follower_id,user_id) values (:1,:2) RETURNING *",
  215. {
  216. '1': i.follower_id,
  217. '2': i.following_user_id
  218. })
  219. elif i.following_tag_id:
  220. p = session2.execute(
  221. "insert into tag_follower (follower_id,tag_id) values (:1,:2) RETURNING *",
  222. {
  223. '1': i.follower_id,
  224. '2': i.following_tag_id
  225. })
  226. elif i.followinf_topic_id:
  227. p = session2.execute(
  228. "insert into topic_follower (follower_id,topic_id) values (:1,:2) RETURNING *",
  229. {
  230. '1': i.follower_id,
  231. '2': i.followinf_topic_id
  232. })
  233. elif i.following_collect_id:
  234. p = session2.execute(
  235. "insert into collect_follower (follower_id,collect_id) values (:1,:2) RETURNING *",
  236. {
  237. '1': i.follower_id,
  238. '2': i.following_collect_id
  239. })
  240. session2.commit()
  241. def upgrade_setval():
  242. session2.execute(
  243. "select setval('boards_id_seq',(select max(id) from boards))")
  244. session2.execute(
  245. "select setval('collects_id_seq',(select max(id) from collects))")
  246. session2.execute("select setval('tags_id_seq',(select max(id) from tags))")
  247. session2.execute(
  248. "select setval('topics_id_seq',(select max(id) from topics))")
  249. session2.execute(
  250. "select setval('replies_id_seq',(select max(id) from replies))")
  251. session2.execute(
  252. "select setval('users_id_seq',(select max(id) from users))")
  253. session2.execute(
  254. "select setval('userinfo_id_seq',(select max(id) from userinfo))")
  255. session2.execute(
  256. "select setval('usersetting_id_seq',(select max(id) from usersetting))")
  257. if __name__ == '__main__':
  258. upgrade_board()
  259. upgrade_user()
  260. upgrade_topic()
  261. upgrade_collect()
  262. upgrade_tags()
  263. upgrade_reply()
  264. upgrade_like()
  265. upgrade_follow()
  266. upgrade_setval()