Skip to content

A Ruia plugin that uses the peewee-async to store data to MySQL or PostgreSQL or both of them

License

Notifications You must be signed in to change notification settings

JackTheMico/ruia-peewee-async

Repository files navigation

ruia-peewee-async

996.icu LICENSE

Testing on main branch Testing on develop branch

Semantic Release

A Ruia plugin that uses peewee-async to store data to MySQL or PostgreSQL or both of them.

Installation

Using pip or pipenv or poetry to install.

pip install ruia-peewee-async[aiomysql]
pipenv install ruia-peewee-async[aiomysql]
poetry add ruia-peewee-async[aiomysql]

or

pip install ruia-peewee-async[aiopg]
pipenv install ruia-peewee-async[aiopg]
poetry add ruia-peewee-async[aiopg]

or

pip install ruia-peewee-async[all]
pipenv install ruia-peewee-async[all]
poetry install ruia-peewee-async[all]

ruia-peewee-async[all] means to install both aiomysql and aiopg.

Usage

A complete example is in the example directory.

There's a create_model method to create the Peewee model based on database configuration. You can use the create_model method to manipulate tables before starting the spider.

from ruia_peewee_async import create_model

mysql_model, mysql_manager, postgres_model, postgres_manager = create_model(mysql=mysql) # or postgres=postgres or both
# create the table at the same time
mysql_model, mysql_manager, postgres_model, postgres_manager = create_model(mysql=mysql, create_table=True) # or postgres=postgres or both
rows = mysql_model.select().count()
print(rows)

And class Spider from ruia_peewee_async has attributes below related to database you can use.

from peewee import Model
from typing import Callable, Dict
from typing import Optional as TOptional
from peewee_async import (
    AsyncQueryWrapper,
    Manager,
    MySQLDatabase,
    PooledMySQLDatabase,
    PooledPostgresqlDatabase,
    PostgresqlDatabase,
)
from ruia import Spider as RuiaSpider

class Spider(RuiaSpider):
    mysql_model: Union[Model, Dict] # It will be a Model instance after spider started.
    mysql_manager: Manager
    postgres_model: Union[Model, Dict] # same above
    postgres_manager: Manager
    mysql_db: MySQLDatabase
    postgres_db: PostgresqlDatabase
    mysql_filters: TOptional[AsyncQueryWrapper]
    postgres_filters: TOptional[AsyncQueryWrapper]

For more information, check out peewee's documentation and peewee-async's documentation.

Development

Using pyenv to install the version of python that you need. For example

pyenv install 3.7.9

Then go to the root of the project and run:

poetry install && poetry install -E aiomysql -E aiopg

to install all dependencies.

MacOS users have to run brew install postgresql to install postgresql and export the pg_config to the PATH, so that the psycorg2 dependency can be installed successfully with pip.

  • Using poetry shell to enter the virtual environment. Or open your favorite editor and select the virtual environment to start coding.
  • Using pytest to run unit tests under tests folder.
  • Using pytest --cov . to run all tests and generate coverage report in terminal.

Thanks

About

A Ruia plugin that uses the peewee-async to store data to MySQL or PostgreSQL or both of them

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published