<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Neko-ryder Hirasawa 𓆏 | +_+</title><generator>teletype.in</generator><description><![CDATA[Neko-ryder Hirasawa 𓆏 | +_+]]></description><image><url>https://img4.teletype.in/files/73/6d/736d4526-d840-4e5b-8f49-24ea6f90ccfd.png</url><title>Neko-ryder Hirasawa 𓆏 | +_+</title><link>https://teletype.in/@ryder_69</link></image><link>https://teletype.in/@ryder_69?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=ryder_69</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/ryder_69?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/ryder_69?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 29 Apr 2026 16:42:30 GMT</pubDate><lastBuildDate>Wed, 29 Apr 2026 16:42:30 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@ryder_69/postgresql_sqlalchemy</guid><link>https://teletype.in/@ryder_69/postgresql_sqlalchemy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=ryder_69</link><comments>https://teletype.in/@ryder_69/postgresql_sqlalchemy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=ryder_69#comments</comments><dc:creator>ryder_69</dc:creator><title>SQLAlchemy + PostgreSQL</title><pubDate>Sat, 09 Jul 2022 10:58:38 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/aa/20/aa20260e-331b-4b8f-a403-691c33ee4b44.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/c9/c9/c9c947fb-e30b-4e75-ac05-0457075b9d88.png"></img>Как устроена эта статья:]]></description><content:encoded><![CDATA[
  <figure id="5HXS" class="m_retina">
    <img src="https://img1.teletype.in/files/c9/c9/c9c947fb-e30b-4e75-ac05-0457075b9d88.png" width="800" />
  </figure>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="vMer">Как устроена эта статья:</p>
    <p id="2Blc">1. <a href="#q5eY">Введение</a></p>
    <p id="mY4h">2. <a href="#jkHm">Установка PostgreSQL</a></p>
    <p id="06Iz">3. <a href="#OsPo">ORM и Core</a></p>
    <p id="HkVr">4. <a href="#Q0Fh">Примеры использований</a></p>
    <ul id="xN9Y">
      <li id="UBjo"><a href="#rFKM">подключение в базу данных</a></li>
      <li id="mntv"><a href="#TOVU">создания таблиц</a></li>
      <li id="x1Iw"><a href="#U4cE">Основные операции SQL</a> </li>
    </ul>
    <p id="QWKy">5. <a href="#IHHe">Заключение</a></p>
  </section>
  <hr />
  <h2 id="q5eY" data-align="center">Введение</h2>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="h7Bf"><strong><a href="https://github.com/sqlalchemy/sqlalchemy" target="_blank">SQLAlchemy </a></strong>— это библиотека на языке Python для работы с реляционными базами данных с применением технологии <a href="https://qna.habr.com/q/9097" target="_blank">ORM </a>(Object Relational Mapper). Оно позволяет описывать структуры баз данных и способы взаимодействия с ними без использования чистого SQL. SQLAlchemy также позволяет работать не только с postgres, но и с MySQL, SQLite, Oracle. Используется в такие компаниях как reddit, Yelp!, DropBox. </p>
  </section>
  <hr />
  <h2 id="jkHm" data-align="center">Установка PostgreSQL</h2>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="7F98">Что бы начать работать с sqlalchemy используя postgres, надо скачать сам PostgreSQL.</p>
    <p id="g3bc">Для установки переходим на сам <a href="https://www.postgresql.org/download/" target="_blank">сайт</a>, выбираем нужную операционную систему и скачиваем postgress удобным способом.</p>
    <p id="QYKm">При установке выбираем место где будет храниться postgres, компоненты которые будут скачиваться (лучше выбрать все), пароль для бд, порт (можно оставить тот что стоит по умолчанию что бы потом проблем не было), опцию в конце (builder) можно не поставить.</p>
    <p id="iOZw">Теперь сервер для бд установлен, если надо к нему подключится например с другого пк надо поменять конфиг в файлах postgres и открыть порт, который указали при установке <a href="https://www.netiq.com/documentation/identity-manager-47/setup_windows/data/connecting-to-a-remote-postgresql-database.html" target="_blank">подробнее тут</a>. Если надо взаимодействовать локально, то уже можно начать, сделать это можно в pgAdmin 4 (который установился вместо postgresql) а так же можно использовать другие более удобные приложения Dbeaver, DataGrip. По дефолту создается первая бд &quot;postgres&quot; для ознакомления с sqlalchemy можно использовать её, потом если понадобится можно создавать другие базы данных для разных задач.</p>
  </section>
  <hr />
  <h2 id="OsPo" data-align="center">ORM и Core</h2>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YchV">В SQLAlchemy существуют два реализаций работы, Core и ORM. Core - абстракция над SQL-базой данных а ORM (Object Relational Mapper) mapping между реляционной БД и объектным представлением. </p>
    <p id="NULv">ORM разработан поверх SQLAlchemy-Core. Как мы можем видеть, базовая архитектура SQLAlchemy приведена ниже.</p>
    <figure id="PrlF" class="m_retina">
      <img src="https://habrastorage.org/r/w1560/getpro/habr/upload_files/089/658/8bc/0896588bc2303e566444e9ba362b4278.png" width="606" />
    </figure>
    <p id="XJIA">Зная SQL можно использовать Core для выполнения необработанных SQL-запросов. Остальным, лучше смотреть в сторону ORM.</p>
    <p id="9W8F">В следующих примерах будет использоваться ORM реализацию SQLAlchemy</p>
  </section>
  <hr />
  <h2 id="Q0Fh" data-align="center">Примеры использований</h2>
  <pre id="x3tb" data-lang="python">pip install sqlalchemy</pre>
  <h3 id="rFKM">Подключение к базу данных</h3>
  <pre id="KnDR" data-lang="python">from sqlalchemy import create_engine 

# &lt;dialect+driver&gt;://&lt;user&gt;@&lt;ip:port&gt;/&lt;database&gt; 
engine = create_engine(&#x27;postgresql://postgres:pass@localhost/postgres&#x27;) 
engine.connect() 
print(engine)</pre>
  <h3 id="TOVU">Создания таблиц</h3>
  <pre id="8tme" data-lang="python">from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base

engine = create_engine(&#x27;postgresql://postgres:pass@localhost/postgres&#x27;) 
engine.connect()  # подключение к бд
# функция, которая создает базовый класс для декларативных классов
Base = declarative_base()


class User(Base):
    __tablename__ = &quot;user&quot;
    id = Column(Integer, primary_key=True)    
    name = Column(String)

    
Base.metadata.create_all(engine)  # создание всех таблиц</pre>
  <h3 id="U4cE">Основные операции SQL</h3>
  <pre id="QAMw" data-lang="python">from sqlalchemy import (    
    create_engine, Column, Integer, String, select, update
)
from sqlalchemy.orm import declarative_base, Session

engine = create_engine(&#x27;postgresql://postgres:pass@localhost/postgres&#x27;)
engine.connect()
Base = declarative_base()
session = Session(engine)

class User(Base):
    __tablename__ = &quot;user&quot;    
    id = Column(Integer, primary_key=True)    
    name = Column(String)
    
    
# SELECT
def selectUser():   
    result = session.execute(select(User))  # поиск всех данных с таблицы        
    for data in result.scalars():      
        print(f&quot;id: {data.id} | name: {data.name}&quot;)
            
# INSERT
def addUser(id: int, name: str):
    session.add(User(id=id, name=name))  # добавление новых данных
    session.commit()
        
# DELETE by id
def deleteUser(id: int):          
    session.query(User).filter(User.id == id).delete()  # поиск и удаление ряда        
    session.commit()
        
# UPDATE name by id
def updateUser(id: int, new_name: str):
    session.execute(update(User).where(User.id == id).values(
            name=new_name))  # поиск и обновление значений
    session.commit()


if __name__ == &#x27;__main__&#x27;:
    # Base.metadata.drop_all(engine)  # удаление таблиц     
    Base.metadata.create_all(engine)  # создание таблиц    
    addUser(id=1, name=&quot;name&quot;)    
    selectUser()    
    updateUser(id=1, new_name=&quot;new_name&quot;)    
    selectUser()    
    deleteUser(1)    
    selectUser()</pre>
  <hr />
  <h2 id="IHHe" data-align="center">Заключение</h2>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="ZKb1">SQLAlchemy это удобная библиотека которая позволяет взаимодействовать с разными структуры баз данных без знания их самих. Кроме postgres можно использовать SQLite которая устанавливается проще, но хранит данные в файле, и для этого надо поменять строчку при подключение к бд. За исключением некоторых типов колонок, например, ARRAY, который есть только в постгресе, все типы можно импортировать из <code>sqlalchemy.dialects</code> что является преимуществом алхимии. Она сама заботится о составлении SQL запросов в зависимости от выбранной технологии.</p>
  </section>
  <p id="CWmM">Дополнительная информация:</p>
  <p id="9xox"><a href="https://pythonru.com/biblioteki/vvedenie-v-sqlalchemy" target="_blank">https://pythonru.com/biblioteki/vvedenie-v-sqlalchemy</a></p>
  <p id="bQzV"><a href="https://www.sqlalchemy.org/" target="_blank">https://www.sqlalchemy.org/</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@ryder_69/http_requests_py</guid><link>https://teletype.in/@ryder_69/http_requests_py?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=ryder_69</link><comments>https://teletype.in/@ryder_69/http_requests_py?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=ryder_69#comments</comments><dc:creator>ryder_69</dc:creator><title>HTTP запросы для новичка [py]</title><pubDate>Tue, 21 Jun 2022 17:22:35 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/64/3e/643ed702-02c5-44bb-86e3-f25af221839a.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/32/ed/32ed5e42-efc7-4cf7-9c2e-093d026544f8.jpeg"></img>Как устроена эта статья:]]></description><content:encoded><![CDATA[
  <figure id="vYUs" class="m_original">
    <img src="https://img4.teletype.in/files/32/ed/32ed5e42-efc7-4cf7-9c2e-093d026544f8.jpeg" width="1920" />
  </figure>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="kO6Y">Как устроена эта статья:</p>
    <p id="PPG2">&gt; <a href="#nSDX">Введение</a></p>
    <p id="LAvg">&gt; <a href="#Vz3m">Что можно юзать?</a></p>
    <ol id="xSsN">
      <li id="annB"><a href="#pUYl">Requests</a></li>
      <li id="yT6x"><a href="#h3OA">Grequests</a></li>
      <li id="r3qS"><a href="#sK1U">Httpx</a></li>
      <li id="JHgG"><a href="#vvM3">Aiohttp</a></li>
    </ol>
    <p id="wL9p">&gt; <a href="#8kvy">Бенчмарки</a></p>
  </section>
  <h2 id="nSDX" data-align="center"><br />Введение</h2>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="JvZf">HTTP — это <a href="https://developer.mozilla.org/ru/docs/Glossary/Protocol" target="_blank">протокол</a>, позволяющий получать различные ресурсы, например HTML-документы. Протокол HTTP лежит в основе обмена данными в Интернете, другими словами каждое ваше действия которую вы делаете в браузере (просмотр видео на youtube, регистрация на сайте) все это HTTP запросы.</p>
    <p id="NUjR">Ниже будут рассматриваться несколько библиотек, которые помогут выполнять HTTP запросы через код.</p>
  </section>
  <h2 id="Vz3m" data-align="center">Что можно юзать?</h2>
  <hr />
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h3 id="pUYl"><a href="https://requests.readthedocs.io/en/latest/" target="_blank">Requests</a></h3>
    <p id="dapx"><code>pip install requests</code></p>
    <p id="ft4B">requests одна из самых простых библиотек которая позволит отправлять HTTP-запросы с помощью Python.</p>
    <p id="fO4V"><em>Простои пример</em></p>
    <pre id="HgWb" data-lang="python">import requests
r = requests.get(&quot;https://example.com&quot;)
print(r)</pre>
    <p id="3wlA">Обычно все новички начинают с этой библиотекой, потом переходят на другие более оптимальные.<br /><br />Плюсы: <br />&gt; просто и понятно (освоить можно за несколько часов) <br />&gt; много гайдов на ютубе/инете <br />&gt; подходит для любых задач<br /><br />минусы: <br />&gt; маленькая скорость</p>
  </section>
  <hr />
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h3 id="h3OA"><a href="https://pypi.org/project/grequests/" target="_blank">Grequests</a></h3>
    <p id="cIvr"><code>pip install grequests</code></p>
    <p id="jLVg">grequests позволяет использовать запросы с Gevent для легкого выполнения асинхронных HTTP-запросов. Грубо говоря, обычные реквесты с асинком под капоты.</p>
    <p id="wqiU">Либа ещё сырая и не видел много где оно применяется, подходит если вам надо сделать много простых запросов на один сайт.</p>
    <p id="abK8"><em>Простои пример</em></p>
    <pre id="2yFi" data-lang="python">import grequests
rs = (grequests.get(&quot;https://example.com&quot;) for _ in range(100))
print(grequests.map(rs))</pre>
    <p id="nOfR"><em>Сравнение с обычными реквестами</em></p>
    <pre id="HhDn" data-lang="python">import grequests
import requests
from time import perf_counter

def greq(count: int):
    start = perf_counter()    
    rs = (grequests.get(&quot;https://example.com&quot;) for _ in range(count))    
    grequests.map(rs)    
    print(f&quot;grequests executed in {perf_counter() - start} seconds...&quot;)
    
def req(count: int):
    start = perf_counter()    
    for _ in range(count):        
        requests.get(&#x27;https://example.com&#x27;)    
    print(f&quot;requests executed in {perf_counter() - start} seconds...&quot;)
    
greq(100)
req(100)</pre>
    <p id="cEvS">С это задачи requests справился за <em><strong>49.19</strong> секунд</em>, в то время как grequests за <strong>2.32</strong> секунд<strong>.</strong><br /></p>
    <p id="XLZZ">плюсы:<br />&gt; быстрая скорость (по сравнению с обычными реквестами)<br /><br />минусы:<br />&gt; либа ещё сырая<br />&gt; гайдов поменьше<br />&gt; менее удобное чем те же реквесты</p>
  </section>
  <hr />
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h3 id="sK1U"><a href="https://www.python-httpx.org/" target="_blank">Httpx</a></h3>
    <p id="jCG2"><code>pip install httpx</code></p>
    <p id="OAUH">httpx - это полнофункциональный HTTP-клиент для Python 3, который предоставляет API-интерфейсы синхронного кода так и асинхронного.</p>
    <p id="4AhW">синхронная часть httpx очень схожа с теми же реквестами, отличается только использования сессии, в httpx она работает немного иначе.</p>
    <p id="XUVc"><em>Простои пример</em></p>
    <pre id="7AV9" data-lang="python">import httpx

with httpx.Client() as client:
    r = client.get(&quot;https://example.com&quot;)
    print(r)</pre>
    <p id="Eiun">Если в реквестах сессию можно инициировать и потом использовать, то в httpx можно передавать клиент в другие функций при это все куки, и хедеры будут сохранены.</p>
    <pre id="eJmz" data-lang="python">import httpx


def test_func(client: httpx.Client):
    client.get(&quot;https://youtube.com&quot;)
    

def main():
    with httpx.Client() as client:
        client.get(&quot;https://example.com&quot;)        
        print(client.cookies.jar)        
        test_func(client)        
        print(client.cookies.jar)


main()</pre>
    <p id="ULJ9">Плюсы:<br />&gt; поддержка синк кода так и асинк<br />&gt; быстрее чем реквесты и grequests <br />&gt; дока удобная, все в одном месте<br /><br />минусы:<br />&gt; медленнее чем aiohttp</p>
    <hr />
  </section>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h3 id="vvM3"><a href="https://docs.aiohttp.org/en/stable/" target="_blank">Aiohttp</a></h3>
    <p id="PrYd"><code>pip install aiohttp</code></p>
    <p id="AC6e">aiohttp - HTTP-клиент/сервер. По сути, это позволяет вам писать асинхронные клиенты и серверы. Пакет aio http также поддерживает серверные Server WebSockets и Client WebSockets</p>
    <p id="gpyu"><em>простой пример</em></p>
    <pre id="gXLf" data-lang="python">import aiohttp
import asyncio


async def main():
    async with aiohttp.ClientSession() as client:
        r = await client.get(&quot;https://example.com&quot;)        
        print(r.status)
        
        
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
asyncio.run(main())</pre>
    <p id="DfgV">плюсы:<br />&gt; самая быстрая либа на данный момент<br />&gt; либа не новая, гайдов много<br /><br />минусы:<br />&gt; неудобно работать с куками<br />&gt; поддержка только асинк кода</p>
  </section>
  <hr />
  <h2 id="8kvy" data-align="center">Бенчмарки</h2>
  <pre id="Xm42">+--------------------------------------+
|  100 requests on https://example.com |
+----------------------+---------------+
| requests             | 48.88 seconds |
+----------------------+---------------+
| requests (session)   | 12.34 seconds |
+----------------------+---------------+
| sync httpx (client)  | 12.39 seconds |
+----------------------+---------------+
| async httpx (client) | 2.20 seconds  |
+----------------------+---------------+
| aiohttp              | 0.81 seconds  |
+----------------------+---------------+
| grequests            | 2.11 seconds  |
+----------------------+---------------+</pre>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="tdBc">код который был использован для теста: <a href="https://github.com/RyDeR-69/http-req-bench" target="_blank">github</a></p>
  </section>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@ryder_69/use_neko_bot</guid><link>https://teletype.in/@ryder_69/use_neko_bot?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=ryder_69</link><comments>https://teletype.in/@ryder_69/use_neko_bot?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=ryder_69#comments</comments><dc:creator>ryder_69</dc:creator><title>Как юзать неко-бота???</title><pubDate>Tue, 24 May 2022 19:11:06 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/57/3a/573afbf4-23b7-48ab-87b6-fc12eea038e4.png"></media:content><description><![CDATA[<img src="https://kartinkin.net/uploads/posts/2021-07/1626725453_27-kartinkin-com-p-anime-oboi-sokhri-anime-krasivo-32.png"></img>список команд:]]></description><content:encoded><![CDATA[
  <figure id="j93Z" class="m_original">
    <img src="https://kartinkin.net/uploads/posts/2021-07/1626725453_27-kartinkin-com-p-anime-oboi-sokhri-anime-krasivo-32.png" width="1600" />
  </figure>
  <h2 id="UABB">Краткая инструкция по использованию бота</h2>
  <p id="ep6h"></p>
  <p id="fG4f"><strong>список команд:</strong></p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="nvqa">/price - показывает цену на все коллекций которые добавлены в боте.</p>
    <p id="EJpm">/add_os - добавляет opensea коллекцию в боте.</p>
    <p id="Dpc7">/add_me - как и /add_os только для magiceden.</p>
    <p id="AcIU">/del - удаляет коллекцию из бота.</p>
    <p id="gQcn">/show - показывает список коллекций которые добавлены в боте.</p>
    <p id="y8br">/last_updates - показывает когда в последний раз обновились цены для opensea, magiceden и когда обновился список всех коллекций magiceden (цены обновляются раз в 5 минут, а список коллекций раз в час).</p>
    <p id="PCXH">/gwei - показывает текущий gwei для сети эфира и цена транзакций за перевод эфира (21000 газ лимит), можно посмотреть сколько будет стоить определённая транзакция если после gwei написать другой газ лимит например /gwei 100000.</p>
  </section>
  <p id="OQUz"></p>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="shIq">slug: то что после ссылки у me и opensea. например, что бы добавить коллекцию с opensea &quot;Karafuru&quot; надо написать /add_os karafuru (на mе аналогично).</p>
  </section>
  <figure id="pmXv" class="m_original">
    <img src="https://img1.teletype.in/files/80/13/80137895-4f85-4e09-858f-96660b6457b9.png" width="247" />
    <figcaption>пример</figcaption>
  </figure>
  <p id="fWdz"></p>
  <p id="Osoe">список комманд возможно будет обновляеться, могут быть баги.</p>

]]></content:encoded></item></channel></rss>