Niulu Academy: Pymysql-moduuli Python
1. Kasvava perustestitoiminto 2, Python kutsuu tallennettua proseduuria 3, monisäikeinen toteutus mysql-käyttötoiminto
一、基础操作On erittäin hankalaa joka kerta, kun muodostat yhteyden, käytä kontekstinhallintaa, yksinkertaista yhteysprosessia.
二、如何python调用 callproc 进行调用储存过程1. Luo täydellinen MySQL-tietokantayhteys 2. Käytä kohdistinta () alustaaksesi tietokannan kohdistin 3. Käytä kursoria kutsuaksesi CallProc-funktiota lisätäksesi muuttujia, joita tarvitaan, kuten CallProc (Name, Args) name = "proc_user" , args = ['21', SYH]; 4. Kohdistin voi siirtää sarjan tulosjoukkoja käyttämällä Storeresultia saadakseen sarjan Iterator-pisteitä tulosjoukkoon 5. Hanki tulokset FetChall-menetelmällä
CallProc ei voi saada OUT- ja INOUT-muuttujia suoraan, mutta muuttujat ovat saatavilla palvelimessa, ja muuttuja voidaan hankkia @_procname_n:llä, ja se voidaan saada saapuvien parametrien sijainnin mukaan, kuten ensimmäinen SELECT @ _ProcName_0
调用无参存储过程调用有参存储过程三、多线程、多进程操作mysql1, multithreaded connection:
Käyttämällä Thieading.Thread-moduulia luo ensin MySQL-yhteys ja sitten useilla säikeillä tietyn SQL:n suorittamiseksi. Mutta havaitaan, että kun se suoritetaan, se ei ole raportti mysql-yhteyden katkaisemisesta, toisin sanoen muista poikkeusvirheistä. Internet-kysely, koska useat säikeet eivät voi jakaa tietokantayhteyttä, tulee odottamattomia tilanteita.
Viralliset suositukset käyttävät yhteysvarastomoduulia viittaamaan muiden käytäntöihin, luomaan säikeen yhteyspooli ja luomaan useita yhteyksiä kerralla.
2. Kolme tapaa luoda säiepooli 1) Aikaisemmin: ThreadPool-moduulia käyttämällä tämä on Pythonin kolmannen osapuolen moduuli, joka tukee Python2:ta ja Python3:a. ThreadPool on vanhempi moduuli. Vaikka joitakin ihmisiä on edelleen käytössä, he eivät enää ole valtavirtaa, noin Python-monisäikeestä, nyt alkamassa tulevaisuuteen (FUTURE-moduuli), erityinen käyttötapa on seuraava:
Toimenpiteen tulokset ovat seuraavat:
2) Tulevaisuudessa: Concurrent.futures-moduulia käytettäessä tämä moduuli on Python3:n moduuli, mutta Python2.7 tai useampia versioita voidaan myös asentaa, ja käyttötarkoitus on seuraava:
Toimenpiteen tulokset ovat seuraavat:
[Huomaa] Concurrent.futures.threadpoolexecutor, tehtäviä voi lähettää kahdella tavalla, joista toinen on lähetys () -funktio, toinen kartta () -funktio. Suurin ero näiden kahden välillä on:
Kartta voi taata tulosteen järjestyksen, lähetystulosten järjestys on kaaos
Jos lähetettävän tehtävän funktio on sama, voit yksinkertaistaa sen Karttaan. Jos lähetetty tehtävätoiminto on kuitenkin erilainen tai suoritusprosessi on epänormaali (ongelma löytyy suoraan MAP-suorituksen toteutuksesta), Lähetä ()
Lähetys- ja MAP-parametrit ovat erilaisia. Submitin tulee lähettää kohdefunktio ja vastaavat parametrit joka kerta, MAPin tarvitsee lähettää vain kohdefunktio ja kohdefunktion parametri sijoitetaan iteraattoriin (luetteloon, sanakirjaan).
3) Nyt?
Tässä on ongelma, yllä olevien kahden säikeen ryhmän toteutus on hyvä. Tehtävän voi lisätä vain kerran, kun säievarasto on alustettu. Oletetaan siis, että minulla on nyt sellainen tarve, että minun täytyy ajaa säikeen alla ja sitten mennä uudelleen. Lisää uusi tehtävä sisään (huomaa, onko uusi tehtävä, ei uusi säiettä), miten teet? Itse asiassa on kaksi tapaa:
Kirjoita ThreadPool- tai Future-toiminto uudelleen: Tämä menetelmä vaatii lähdemoduulin lähdekoodin. Sinun on selvitettävä lähdemoduulin säietaltaan toteutusmekanismi, jotta voit kirjoittaa menetelmän oikein uudelleen tarpeidesi mukaan.
Rakenna säievarasto itse: Tällä menetelmällä on oltava selkeä käsitys säievarannosta, joka on liitetty rakennettuun säievarastoinstanssiin: