Guest User

Untitled

a guest
Oct 15th, 2018
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.48 KB | None | 0 0
  1. {
  2. "cells": [
  3. {
  4. "cell_type": "code",
  5. "execution_count": 3,
  6. "metadata": {
  7. "ExecuteTime": {
  8. "end_time": "2018-10-15T10:20:01.851973Z",
  9. "start_time": "2018-10-15T10:20:01.476818Z"
  10. }
  11. },
  12. "outputs": [
  13. {
  14. "name": "stdout",
  15. "output_type": "stream",
  16. "text": [
  17. "Mapper: Mapper|User|users\n",
  18. "Found user1\n",
  19. "User('user1','username1', '3833b3a1c69cf71a31d86cb5bb4d3866789b4d1e')\n",
  20. "SELECT * FROM users WHERE name=?\n",
  21. "2\n",
  22. "<class '__main__.User'>\n",
  23. "user1 username1 3833b3a1c69cf71a31d86cb5bb4d3866789b4d1e\n",
  24. "<class '__main__.User'>\n",
  25. "user2 username2 148dfdc3c539d35004cb808ca84e17ff962af744\n",
  26. "<class 'sqlalchemy.util._collections.result'>\n",
  27. "username1\n",
  28. "<class 'sqlalchemy.util._collections.result'>\n",
  29. "username2\n",
  30. "查總筆數\n",
  31. "2\n",
  32. "where多筆條件\n",
  33. "1\n",
  34. "遞增排序\n",
  35. "<class 'sqlalchemy.util._collections.result'>\n",
  36. "1\n",
  37. "<class 'sqlalchemy.util._collections.result'>\n",
  38. "2\n",
  39. "遞減排序\n",
  40. "<class 'sqlalchemy.util._collections.result'>\n",
  41. "2\n",
  42. "<class 'sqlalchemy.util._collections.result'>\n",
  43. "1\n",
  44. "限制輸出筆數\n",
  45. "User('user1','username1', '3833b3a1c69cf71a31d86cb5bb4d3866789b4d1e')\n",
  46. "1\n",
  47. "User('user2','username2', '148dfdc3c539d35004cb808ca84e17ff962af744')\n",
  48. "2\n",
  49. "MultipleResultsFound!\n",
  50. "MultipleResultsFound!\n",
  51. "1\n",
  52. "2\n",
  53. "刪除\n",
  54. "Affected rows: 1\n",
  55. "id 1 not found\n",
  56. "更新\n",
  57. "Affected rows: 1\n",
  58. "20 ysuper\n"
  59. ]
  60. }
  61. ],
  62. "source": [
  63. "import hashlib\n",
  64. "import sqlalchemy\n",
  65. "from sqlalchemy import create_engine\n",
  66. "from sqlalchemy import Column, Integer, String\n",
  67. "from sqlalchemy import ForeignKey\n",
  68. "from sqlalchemy import desc\n",
  69. "from sqlalchemy.orm import relationship, backref\n",
  70. "from sqlalchemy.orm import sessionmaker\n",
  71. "from sqlalchemy.ext.declarative import declarative_base\n",
  72. "\n",
  73. "Base = declarative_base()\n",
  74. "class User(Base):\n",
  75. " __tablename__ = 'users'\n",
  76. " id = Column(Integer, primary_key=True)\n",
  77. " name = Column(String)\n",
  78. " username = Column(String)\n",
  79. " password = Column(String)\n",
  80. " def __init__(self, name, username, password):\n",
  81. " self.name = name\n",
  82. " self.username = username\n",
  83. " self.password = hashlib.sha1(password).hexdigest()\n",
  84. " def __repr__(self):\n",
  85. " return \"User('{}','{}', '{}')\".format(\n",
  86. " self.name,\n",
  87. " self.username,\n",
  88. " self.password\n",
  89. " )\n",
  90. "if __name__ == '__main__':\n",
  91. "# engine = create_engine('sqlite:///:memory:', echo=True)\n",
  92. " engine = create_engine('sqlite:///ysupertemp.db', echo=False)\n",
  93. " Base.metadata.create_all(engine)\n",
  94. " auser = User('user1', 'username', 'userpassword'.encode('utf-8'))\n",
  95. " print('Mapper:', auser.__mapper__)\n",
  96. " Session = sessionmaker(bind=engine)\n",
  97. " session = Session()\n",
  98. " \n",
  99. " user_1 = User('user1', 'username1', 'password_1'.encode('utf-8'))\n",
  100. " session.add(user_1)\n",
  101. " row = session.query(User).filter_by(name='user1').first()\n",
  102. " if row:\n",
  103. " print('Found user1')\n",
  104. " print(row)\n",
  105. " else:\n",
  106. " print('Can not find user1')\n",
  107. "# session.rollback() # 資料庫回到新增 user1 之前的狀態\n",
  108. "# row = session.query(User).filter_by(name='user1').first()\n",
  109. "# if row:\n",
  110. "# print('Found user1 after rollback')\n",
  111. "# print(row)\n",
  112. "# else:\n",
  113. "# print('Can not find user1 after rollback')\n",
  114. " user_2 = User('user2', 'username2', 'password_2'.encode('utf-8'))\n",
  115. " session.add(user_2)\n",
  116. " session.commit()\n",
  117. " rows = session.query(User).from_statement('SELECT * FROM users WHERE name=:name').params(name='user2')\n",
  118. " print(rows)\n",
  119. " for r in rows:\n",
  120. " print(r.id)\n",
  121. " for r in session.query(User):\n",
  122. " print(type(r))\n",
  123. " print(r.name, r.username, r.password)\n",
  124. " for r in session.query(User.username):\n",
  125. " print(type(r))\n",
  126. " print(r.username)\n",
  127. " print(\"查總筆數\")\n",
  128. " print(session.query(User).count()) \n",
  129. " print(\"where多筆條件\")\n",
  130. " for r in session.query(User.id).filter(User.id==1).filter(User.name=='user1'):\n",
  131. " print(r.id)\n",
  132. " print(\"遞增排序\")\n",
  133. " for r in session.query(User.id).order_by(User.id.asc()):\n",
  134. " print(type(r))\n",
  135. " print(r.id) \n",
  136. " print(\"遞減排序\")\n",
  137. " for r in session.query(User.id).order_by(User.id.desc()):\n",
  138. " print(type(r))\n",
  139. " print(r.id)\n",
  140. " print(\"限制輸出筆數\")\n",
  141. " for row in session.query(User)[0:5]: #其中 5 減 0 的數值為 LIMIT 的數值,限制 5 筆;而 0 為 OFFSET 從第 1 筆資料開始查詢。\n",
  142. " print(row)\n",
  143. " print(row.id)\n",
  144. " \n",
  145. " # first() 只回傳第一筆結果,即使有多筆結果也只會回傳第一筆\n",
  146. " # scalar() 只回傳第一筆結果,查無結果則回傳 None ,若有查詢有多筆結果則會產生例外錯誤\n",
  147. " try:\n",
  148. " result = session.query(User).scalar()\n",
  149. " except sqlalchemy.orm.exc.MultipleResultsFound:\n",
  150. " print('MultipleResultsFound!')\n",
  151. " else:\n",
  152. " if result is None:\n",
  153. " print('NoResultFound!')\n",
  154. " else:\n",
  155. " print(result.id)\n",
  156. " # one() 回傳一筆結果,如有多筆或查無結果的情況則會產生例外錯誤\n",
  157. " try:\n",
  158. " result = session.query(User).one()\n",
  159. " except sqlalchemy.orm.exc.NoResultFound:\n",
  160. " print('NoResultFound!')\n",
  161. " except sqlalchemy.orm.exc.MultipleResultsFound:\n",
  162. " print('MultipleResultsFound!')\n",
  163. " else:\n",
  164. " print(result.id)\n",
  165. " # all() 將所有結果匯出成一個 list 回傳\n",
  166. " allres = session.query(User).all()\n",
  167. " for r in allres:\n",
  168. " print(r.id)\n",
  169. " print(\"刪除\")\n",
  170. " affected_rows = session.query(User).filter_by(id=1).delete()\n",
  171. " session.commit()\n",
  172. " print('Affected rows:', affected_rows)\n",
  173. " if session.query(User).filter_by(id=1).count() == 0:\n",
  174. " print('id 1 not found') \n",
  175. " print(\"更新\")\n",
  176. " affected_rows = session.query(User).filter_by(id=2).update({'id':20, 'username':\"ysuper\"})\n",
  177. " session.commit()\n",
  178. " print('Affected rows:', affected_rows)\n",
  179. " for r in session.query(User):\n",
  180. " print(r.id, r.username) "
  181. ]
  182. }
  183. ],
  184. "metadata": {
  185. "kernelspec": {
  186. "display_name": "Python 3",
  187. "language": "python",
  188. "name": "python3"
  189. },
  190. "language_info": {
  191. "codemirror_mode": {
  192. "name": "ipython",
  193. "version": 3
  194. },
  195. "file_extension": ".py",
  196. "mimetype": "text/x-python",
  197. "name": "python",
  198. "nbconvert_exporter": "python",
  199. "pygments_lexer": "ipython3",
  200. "version": "3.7.0"
  201. }
  202. },
  203. "nbformat": 4,
  204. "nbformat_minor": 2
  205. }
Add Comment
Please, Sign In to add comment