Guest User

Untitled

a guest
Dec 10th, 2017
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.78 KB | None | 0 0
  1. #Создать таблицу employee
  2. #Заполнить одну строку значением dilbert
  3. #Вывести одну строку таблицы
  4.  
  5. запрос1:
  6. from sqlalchemy import create_engine
  7. import os
  8.  
  9. if os.path.exists("some.db"):
  10. os.remove("some.db")
  11. e = create_engine("sqlite:///some.db")
  12. e.execute("""
  13. create table employee (
  14. emp_id integer primary key,
  15. emp_name varchar(30)
  16. )
  17. """)
  18.  
  19. e.execute("""insert into employee(emp_name) values ('dilbert')""")
  20.  
  21. result = e.execute("select * from employee")
  22. for row in result:
  23. print(row)
  24.  
  25. ответ:
  26. vova@debian:~$ python laba5.py
  27. (1, u'dilbert')
  28.  
  29.  
  30. #Создать таблицы user и network
  31. #Вывести на экран названия столбцов таблицы network
  32. #При помощи inspect вывести на экран названия столбцов таблицы user
  33. #При помощи inspect вывести на экран стобцы, содержащие поле story_id (т.к. таких не существует, то вывели пустое поле)
  34. запрос2:
  35. from sqlalchemy import MetaData
  36. from sqlalchemy import Table, Column
  37. from sqlalchemy import Integer, String, DateTime
  38. from sqlalchemy import create_engine
  39. from sqlalchemy import inspect
  40. from sqlalchemy import ForeignKey
  41.  
  42. metadata = MetaData()
  43. user_table = Table('user', metadata,
  44. Column('id', Integer, primary_key=True),
  45. Column('name', String),
  46. Column('fullname', String)
  47. )
  48.  
  49. metadata2 = MetaData()
  50. net_table = Table('network', metadata2,
  51. Column('net_id', Integer, primary_key=True),
  52. Column('name', String(100), nullable=False),
  53. Column('create_at', DateTime, nullable=False),
  54. Column('owner_id', Integer, ForeignKey('user.id'))
  55. )
  56.  
  57. force = create_engine("sqlite:///some.db")
  58. print(metadata.create_all(force))
  59.  
  60. net_reflected=Table('network', metadata2, autoload=True, autoload_with=force)
  61. print(net_reflected.c)
  62.  
  63. inspector=inspect(force)
  64. print(inspector.get_table_names())
  65. print(inspector.get_columns('story_id'))
  66.  
  67. ответ:
  68. vova@debian:~$ python laba5.py
  69. None
  70. ['network.net_id', 'network.name', 'network.create_at', 'network.owner_id']
  71. [u'employee', u'user']
  72. []
  73.  
  74. #Создать таблицу user
  75. #Найти в таблице строки с нужными значениями
  76. запрос3:
  77. from sqlalchemy import MetaData, Table, Column, String, Integer
  78. from sqlalchemy import create_engine
  79. #from sqlalchemy
  80.  
  81. metadata = MetaData()
  82. user_table = Table('user', metadata,
  83. Column('id', Integer, primary_key=True),
  84. Column('username', String(50)),
  85. Column('fullname', String(50))
  86. )
  87.  
  88.  
  89. force = create_engine("sqlite:///some.db")
  90. metadata.create_all(force)
  91.  
  92. str(user_table.c.fullname == 'ed')
  93. print(user_table.c.fullname == 'ed')
  94.  
  95. str((user_table.c.fullname == 'ed') & (user_table.c.id>5))
  96. print((user_table.c.fullname == 'ed') & (user_table.c.id>5))
  97.  
  98. str((user_table.c.username == 'edward') | ((user_table.c.fullname == 'ed') & (user_table.c.id > 5)))
  99. print((user_table.c.username == 'edward') | ((user_table.c.fullname == 'ed') & (user_table.c.id > 5)))
  100. ответ:
  101. vova@debian:~$ python laba5.py
  102. "user".fullname = :fullname_1
  103. "user".fullname = :fullname_1 AND "user".id > :id_1
  104. "user".username = :username_1 OR "user".fullname = :fullname_1 AND "user".id > :id_1
  105.  
  106. #Создать таблицу user
  107. #При помощи insert добавить в таблицу строку
  108. #При помощи select выбрать нужные строки из таблицы
  109. запрос 4:
  110. from sqlalchemy import MetaData, Table, Column, String, Integer
  111. from sqlalchemy import create_engine
  112. from sqlalchemy import select
  113. from sqlalchemy import and_, or_
  114.  
  115.  
  116. metadata = MetaData()
  117. user_table = Table('user', metadata,
  118. Column('id', Integer, primary_key=True),
  119. Column('username', String(50)),
  120. Column('fullname', String(50))
  121. )
  122.  
  123.  
  124. force = create_engine("sqlite://")
  125. metadata.create_all(force)
  126.  
  127. insert_s = user_table.insert().values(username='dilbert', fullname='Dilbert Jones')
  128.  
  129. conn = force.connect()
  130. result = conn.execute(insert_s)
  131. print(result)
  132. print(result.inserted_primary_key)
  133.  
  134.  
  135. select_s = select([user_table.c.username, user_table.c.fullname]).\
  136. where(
  137. or_(
  138. user_table.c.username == 'wendy',
  139. user_table.c.username == 'dilbert'
  140. )
  141. ).\
  142. order_by(user_table.c.fullname)
  143. answ = conn.execute(select_s)
  144. for row in answ:
  145. print(row)
  146.  
  147. ответ:
  148. vova@debian:~$ python laba5.py
  149. <sqlalchemy.engine.result.ResultProxy object at 0xb6b266ec>
  150. [1]
  151. (u'dilbert', u'Dilbert Jones')
  152.  
  153. #Создать таблицы user и address
  154. #При помощи join объединить их разными методами(условия - where, группировка - order_by)
  155. запрос5:
  156. from sqlalchemy import MetaData, Table, Column, String, Integer
  157. from sqlalchemy import create_engine
  158. from sqlalchemy import select
  159. from sqlalchemy import and_, or_
  160. from sqlalchemy import ForeignKey
  161.  
  162.  
  163. metadata = MetaData()
  164. user_table = Table('user', metadata,
  165. Column('id', Integer, primary_key=True),
  166. Column('username', String(50)),
  167. Column('fullname', String(50))
  168. )
  169.  
  170. address_table = Table("address", metadata,
  171. Column('id', Integer, primary_key=True),
  172. Column('user_id', Integer, ForeignKey('user.id'),
  173. nullable=False),
  174. Column('email_address', String(100), nullable=False)
  175. )
  176.  
  177. force = create_engine("sqlite://")
  178. metadata.create_all(force)
  179.  
  180. conn = force.connect()
  181. conn.execute(address_table.insert(), [
  182. {"user_id": 1, "email_address": "ed@ed.com"},
  183. {"user_id": 1, "email_address": "ed@gmail.com"},
  184. {"user_id": 2, "email_address": "jack@yahoo.com"},
  185. {"user_id": 3, "email_address": "wendy@gmail.com"},
  186. ])
  187.  
  188.  
  189. join_obj = user_table.join(address_table,
  190. user_table.c.id == address_table.c.user_id)
  191. print(join_obj)
  192.  
  193. select_stmt = select([user_table, address_table]).select_from(join_obj).\
  194. where(user_table.c.username == 'ed').\
  195. order_by(address_table.c.email_address)
  196.  
  197. answ=conn.execute(select_stmt)
  198. print(answ)
  199.  
  200. ответ:
  201. vova@debian:~$ python laba5.py
  202. "user" JOIN address ON "user".id = address.user_id
  203. <sqlalchemy.engine.result.ResultProxy object at 0xb6bb7e2c>
  204.  
  205. #Создать таблицу user и address
  206. #Заполнить таблицу address данными
  207. #Обновить данные в таблице при помощи update
  208. запрос6:
  209. from sqlalchemy import MetaData, Table, Column, String, Integer
  210. from sqlalchemy import create_engine
  211. from sqlalchemy import select
  212. from sqlalchemy import and_, or_
  213. from sqlalchemy import ForeignKey
  214.  
  215. metadata = MetaData()
  216. user_table = Table('user', metadata,
  217. Column('id', Integer, primary_key=True),
  218. Column('username', String(50)),
  219. Column('fullname', String(50))
  220. )
  221.  
  222. address_table = Table("address", metadata,
  223. Column('id', Integer, primary_key=True),
  224. Column('user_id', Integer, ForeignKey('user.id'),
  225. nullable=False),
  226. Column('email_address', String(100), nullable=False)
  227. )
  228.  
  229. force = create_engine("sqlite://")
  230. metadata.create_all(force)
  231.  
  232. conn = force.connect()
  233. conn.execute(address_table.insert(), [
  234. {"user_id": 1, "email_address": "ed@ed.com"},
  235. {"user_id": 1, "email_address": "ed@gmail.com"},
  236. {"user_id": 2, "email_address": "jack@yahoo.com"},
  237. {"user_id": 3, "email_address": "wendy@gmail.com"},
  238. ])
  239.  
  240.  
  241. update_s = user_table.update().\
  242. values(fullname = "Ed Jones").\
  243. where(user_table.c.username == "ed")
  244.  
  245. conn = force.connect()
  246. result = conn.execute(update_s)
  247. print(result)
  248.  
  249. print(result.rowcount)
  250.  
  251. update_st = user_table.update().\
  252. values(fullname=user_table.c.username + " "
  253. + user_table.select(address_table.c.email_address).\
  254. where(address_table.c.user_id == user_table.c.id)).\
  255. where(
  256. or_(
  257. user_table.c.username == "jack",
  258. user_table.c.username == "wendy"
  259. )
  260. )
  261.  
  262. conn = force.connect()
  263. answ = conn.execute(update_s)
  264. print(answ)
  265.  
  266. ответ:
  267. vova@debian:~$ python laba5.py
  268. <sqlalchemy.engine.result.ResultProxy object at 0xb6b19ecc>
  269. 0
  270. <sqlalchemy.engine.result.ResultProxy object at 0xb6b19f0c>
  271.  
  272. #Создать таблицу network в классе Network
  273. #Используя Session добавить в нее данные
  274. запрос7:
  275. from sqlalchemy import MetaData
  276. from sqlalchemy import Table, Column
  277. from sqlalchemy import Integer, String, DateTime
  278. from sqlalchemy import create_engine
  279. from sqlalchemy.orm import Session
  280. from sqlalchemy.ext.declarative import declarative_base
  281. Base = declarative_base()
  282.  
  283.  
  284. class Network(Base):
  285. __tablename__ = 'network'
  286.  
  287. network_id = Column(Integer, primary_key=True)
  288. name = Column(String(100), nullable=False)
  289.  
  290. def __repr__(self):
  291. return "<Network(%r, %r)>" % (
  292. self.name
  293. )
  294.  
  295. force =create_engine("sqlite:///some.db")
  296. Base.metadata.create_all(force)
  297.  
  298. session = Session(bind=force)
  299.  
  300. ed_user1 = Network(name='net1')
  301. session.add(ed_user1)
  302.  
  303. ed_user2 = Network(name='net2')
  304. session.add(ed_user2)
  305.  
  306. session.commit()
  307. print(ed_user1.name, ed_user2.name)
  308.  
  309. ответ:
  310. vova@debian:~$ python laba5.py
  311. (u'net1', u'net2')
  312.  
  313.  
  314. #Создать таблицу user и заполнить ее данными
  315. #При помощи order_by упорядочить по алфавиту данные
  316. #При помощи filter сделать выборку
  317. запрос8:
  318. from sqlalchemy import MetaData, and_, or_
  319. from sqlalchemy import Table, Column
  320. from sqlalchemy import Integer, String, DateTime
  321. from sqlalchemy import create_engine
  322. from sqlalchemy.orm import Session
  323. from sqlalchemy.ext.declarative import declarative_base
  324. Base = declarative_base()
  325.  
  326.  
  327. class User(Base):
  328. __tablename__ = 'user'
  329.  
  330. user_id = Column(Integer, primary_key=True)
  331. name = Column(String(100), nullable=False)
  332. fullname = Column(String(100), nullable=False)
  333.  
  334. def __repr__(self):
  335. return "<User(%r, %r)>" % (
  336. self.name, self.fullname
  337. )
  338.  
  339. force =create_engine("sqlite:///some.db")
  340. Base.metadata.create_all(force)
  341.  
  342. session = Session(bind=force)
  343. session.add_all([
  344. User(name='wendy', fullname='Wendy Weathersmith'),
  345. User(name='mary', fullname='Mary Contrary'),
  346. User(name='fred', fullname='Fred Flinstone')
  347. ])
  348. session.commit()
  349.  
  350. queury = session.query(User.fullname).order_by(User.fullname)
  351. print(queury.all())
  352.  
  353. query2 = session.query(User.fullname).filter(
  354. or_(
  355. User.name=='mary',
  356. User.name=='ed'
  357. ))
  358. print(query2.all())
  359. print(queury[2])
  360. ответ:
  361. vova@debian:~$ python laba5.py
  362. [(u'Fred Flinstone',), (u'Mary Contrary',), (u'Wendy Weathersmith',)]
  363. [(u'Mary Contrary',)]
  364. (u'Wendy Weathersmith',)
  365.  
  366. #Создать таблицы user и address и заполняем их данными
  367. #При помощи join объединить их
  368. #При помощи filter выбрать нужные нам строки (сделать выборку)
  369. запрос9:
  370. from sqlalchemy import and_, or_
  371. from sqlalchemy import Table, Column, MetaData
  372. from sqlalchemy import Integer, String, DateTime
  373. from sqlalchemy import create_engine
  374. from sqlalchemy import ForeignKey
  375.  
  376. from sqlalchemy.orm import relationship
  377. from sqlalchemy.orm import Session
  378. from sqlalchemy.ext.declarative import declarative_base
  379. Base = declarative_base()
  380.  
  381. class User(Base):
  382. __tablename__ = 'user'
  383.  
  384. user_id = Column(Integer, primary_key=True)
  385. name = Column(String(100), nullable=False)
  386. fullname = Column(String(100), nullable=False)
  387.  
  388. def __repr__(self):
  389. return "<User(%r, %r, %r)>" % (
  390. self.user_id, self.name, self.fullname
  391. )
  392.  
  393. class Address(Base):
  394. __tablename__ = 'address'
  395.  
  396. id = Column(Integer, primary_key=True)
  397. email_address = Column(String, nullable=False)
  398. user_id = Column(Integer, ForeignKey('user.id'))
  399.  
  400. user = relationship("User", backref="addresses")
  401.  
  402. def __repr__(self):
  403. return "<Address(%r,%r)>" % self.id, self.email_address
  404.  
  405. force =create_engine("sqlite://")
  406. Base.metadata.create_all(force)
  407. q = Session(bind=force)
  408.  
  409. q.add_all([
  410. User(name='wendy', fullname='Wendy Weathersmith'),
  411. User(name='mary', fullname='Mary Contrary'),
  412. User(name='fred', fullname='Fred Flinstone')
  413. ])
  414.  
  415. jack = User(name='jack', fullname='Jack Bean')
  416. jack.addresses
  417.  
  418. jack.addresses = [
  419. Address(email_address='jack@gmail.com'),
  420. Address(email_address='j25@yahoo.com'),
  421. Address(email_address='jack@hotmail.com'),
  422. ]
  423.  
  424.  
  425. q.commit()
  426.  
  427. query = ession.query(User.name).join(Address.email_address).\
  428. filter(Address.email_address == 'j25@yahoo.com').all()
  429.  
  430. print(query.all())
  431.  
  432. ответ:
  433. vova@debian:~$ python laba5.py
  434. [('jack', 'j25@yahoo.com')]
  435.  
  436. #1 Создать класс под названием «Account» с таблицей «account»
  437. #2 Создать класс "Transaction", с таблицей "transaction"
  438. #3 Добавить связь в Transaction с именем «account», которая ссылается
  439. # на «Account» и имеет ссылку на обратную ссылку «transactions».
  440. #4 Создать базу данных, создать таблицы, затем вставить эти объекты
  441. запрос10:
  442. from sqlalchemy import func
  443. from sqlalchemy import MetaData, and_, or_
  444. from sqlalchemy import Table, Column
  445. from sqlalchemy import Integer, String, DateTime, Numeric
  446. from sqlalchemy import create_engine
  447. from sqlalchemy import ForeignKey
  448. import os
  449. from sqlalchemy.orm import relationship
  450. from sqlalchemy.orm import Session
  451. from sqlalchemy.ext.declarative import declarative_base
  452. Base = declarative_base()
  453.  
  454. class Account(Base):
  455. __tablename__ = 'account'
  456.  
  457. id = Column(Integer, primary_key=True)
  458. owner = Column(String(50), nullable=False)
  459. balance = Column(Numeric, default=0)
  460.  
  461. def __repr__(self):
  462. return "<Account(%r, %r)>" % (
  463. self.owner, self.balance
  464. )
  465.  
  466. class Transaction(Base):
  467. __tablename__ = 'transaction'
  468.  
  469. id = Column(Integer, primary_key=True)
  470. account_id = Column(Integer, ForeignKey('account.id'))
  471. amount = Column(Numeric, default=0)
  472.  
  473. account = relationship("Account", backref="transactions")
  474.  
  475. def __repr__(self):
  476. return "<Transaction(%r, %r)>" % (
  477. self.owner, self.balance
  478. )
  479.  
  480. force =create_engine("sqlite:///some.db")
  481. Base.metadata.create_all(force)
  482.  
  483. session = Session(bind=force)
  484.  
  485. q1 = Account(owner='Jack Jones', balance=5000)
  486. q2 = Account(owner='Ed Rendell', balance=10000)
  487.  
  488.  
  489. session.add_all([
  490. q1,
  491. q2,
  492. Transaction(amount=500, account=q1),
  493. Transaction(amount=4500, account=q1),
  494. Transaction(amount=6000, account=q2),
  495. Transaction(amount=4000, account=q2)
  496. ])
  497.  
  498. session.commit()
  499.  
  500. query = session.query(
  501. Account.owner, Account.balance,
  502. func.sum(Transaction.amount).lable('summ')
  503. ).select_from(Account).join(Transaction.account).all()
Add Comment
Please, Sign In to add comment