From 3be9a4ef156b039db3927fb554645ad567a8914f Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Fri, 3 Feb 2023 16:05:11 +0800 Subject: [PATCH 1/6] python3 api-0.0.2 --- .gitignore | 2 + Python/SqlDrive/SqlDrive.py | 86 ----------------- .../__pycache__/SqlDrive.cpython-310.pyc | Bin 4109 -> 0 bytes Python/drive/driver.py | 89 ++++++++++++++++++ Python/requirements.txt | 1 + Python/test.py | 10 +- 6 files changed, 99 insertions(+), 89 deletions(-) create mode 100644 .gitignore delete mode 100644 Python/SqlDrive/SqlDrive.py delete mode 100644 Python/SqlDrive/__pycache__/SqlDrive.cpython-310.pyc create mode 100644 Python/drive/driver.py create mode 100644 Python/requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..99ec428 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pyc +.idea diff --git a/Python/SqlDrive/SqlDrive.py b/Python/SqlDrive/SqlDrive.py deleted file mode 100644 index 024523d..0000000 --- a/Python/SqlDrive/SqlDrive.py +++ /dev/null @@ -1,86 +0,0 @@ -import requests -import time -import hashlib - -class SQL_DO(object): - def __init__(self,remote,user,passwd) -> None: - self.userName = user - self.Passwd = passwd - self.Remote = remote - - def add_MD5(self,addStr:str)->str: - hl = hashlib.md5() - hl.update(addStr.encode("utf-8")) - return hl.hexdigest() - - def sendMysScript(self,script:str) -> bool: - #print(str(self.Remote)+"/?Logon="+str(self.userName)+"?Passwd="+str(self.add_MD5(self.Passwd))+"?Command="+script) - r = requests.get(str(self.Remote)+"/?Logon="+str(self.userName)+"?Passwd="+str(self.add_MD5(self.Passwd))+"?Command="+script) - getText = r.text - split:list[str] = getText.split("\n") - message:str = "" - j = 0 - splitADD:list[str] = [] - for i in split: - j += 1 - splitADD.append(str(i)+"\n") - - message = message.join(splitADD) - - j = j - 1 - self.Message = message - if j == 0: - return False - else: - return True - def getMessage(self) -> str: - return self.Message - def outValue(self) -> None: - print(self.userName+" "+self.Passwd+" "+self.Remote) - - def listDatabase(self) -> list[str]: - if self.sendMysScript("list database") == True: - return self.getMessage().split("\n") - else: - return [] - - def deleteDatabase(self,name:str) -> bool: - return self.sendMysScript("delete database "+str(name)) - - def deleteData(self,name:str,database:str) -> bool: - return self.sendMysScript("delete data '"+str(name)+"' in "+database) - - def reNameDatabase(self,name:str,NewName:str) -> bool: - return self.sendMysScript("rename database '"+name+"' '"+NewName+"'") - - def reNameData(self,name:str,NewName:str,database:str) -> bool: - return self.sendMysScript("rename data '"+name+"' '"+NewName+"' in "+database) - - def createDatabase(self,name:str) -> bool: - return self.sendMysScript("create database '"+name+"'") - - def createData(self,name:str,database:str) -> bool: - return self.sendMysScript("create data '"+name+"' in "+database) - - def findDatabase(self,index:str) -> list[str]: - self.sendMysScript("find database "+index) - return self.getMessage().split("\n") - - def findData(self,index:str) -> list[str]: - self.sendMysScript("find data "+index) - return self.getMessage().split("\n") - - def getData(self,dataName:str,type:str,database:str) -> str: - self.sendMysScript("get '"+dataName+"'."+type+" in"+database) - return self.getMessage().replace("\n","") - - def indexData(self,index:str,database:str) -> list[str]: - self.sendMysScript("index '"+index+"' in "+database) - return self.getMessage().split("\n") - - def copyDatabase(self,name:str,target:str) -> bool: - return self.sendMysScript("copy '"+name+"' '"+target+"'") - - def getAlldata_FromDatabase(self,database:str) -> list[str]: - self.sendMysScript("ls "+database) - return self.getMessage().split("\n") \ No newline at end of file diff --git a/Python/SqlDrive/__pycache__/SqlDrive.cpython-310.pyc b/Python/SqlDrive/__pycache__/SqlDrive.cpython-310.pyc deleted file mode 100644 index 25f3ae095ee1a23ef50f5c6f451a2745cefab87e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4109 zcmai1PjeeZ7N4FOjYf(s+lpf+28;+q8oH(cUlGFZPk9tOu?P65(ru)5q-M@bSy471;%v*T=_wz5U zTML%;D|MzH7oB@}!}meB#aUqO#$UF}bl={!zqYu|ogXdk2vFbZRovg8Vbxni zryn1kdw9b>vn*lJEW0-UfIHm%(cN`;MnGS<`!4r*7Mu+CHOB)d$MfK1wcO@c_yT%9 zbQgI6tsMAy;oh+JZN9{p!MVa$65S%d3eJM&tWLNdzsA?VUDVw5gnOOe0Jo5E&3K=0 z@Yf(&nws}@{suV9bMtQUH^E)uB|T@1%H?nIo8T7bxNq}Y;9li_z}R>2#;dveJ}>h> zLb9sI$J}@(k5~A+kX+NNzL(&BpKpP?HkrY!y3MQLu5%k+`A~T~-+$MrJyM<&(Li?V zEpoAWsBPo@5^uN$GO|Zj!x}lDY{WoqZtYlStX^@HKL~}aH# ztAkKhdwtQZHKXR%&eNbK+dqhE(s+Cv9rn6u-w3w*$I5Rs+TC{4Xn3?4A|CTto(-2` z3v3&?@|v9QM6yLYH;;ox2Cue63601avs3HD9@%4i#KsP1r}!~gXzZTCCKbCr%nYLa zt&b}il|5{Rhe3N!IURmmd4oQ0!VI41wt8Hs+@W~R+Xo_yDvqRlkV_!SJ`A*FVzNlA zERZ!G)^1-xM{mJr%gkrP!ek2*vGT%}Z1s#jAJl6B@LG2>v{BUNFwqE!}os zpvCRDH_kxnoifdH)~yj_r;PS|ls$1q&e-QJ`Yz9$WVm#M_kggwD zC*CMK&S7RBYq+G%tfyO}%s4;FLNi07uG1*2)VPA4_g`B+;{J}sbFg8)KJ=@1zv~_J zx_5^D-8ii740CtC>~%WLF2AE#URe^A!}^WLgC~^*=CV~V+UWv3`G%Ih?E!bGgSs;!7Elm0m$@ayBozWAgHlN-lf(YHorHB{?!Zy;vEPz zvYTm+8rkKzO3)fvV_-RD+(tAN&_kw(lrMF1B_lL`?rsERYmNCr>JNfDhGa)hEv$wok_ zfGl$nh)5(bOJ{bB@C~S-t&7EnXwMt55Gxv#RSbDaYZlq?+63Y32<017w8+Kgp>~3E z1D#o%R47JxHC_isox)oxzsi(L?QTi_33@PX3ihvH%p=aHcxb#vyOD-uDplFKct*#} zIiM8x6q_$opj5F8NRGJFK;iurDaa?OVauI0 zkWWAo`_9VG9jgYcE(Nhw=fRGq0547fE|ujSTJ9qvcR?!dlyNoK3oV=?`WQ+&wKh`= zr_ytgnqW;M)nGNAUuj8!Gi}PC@^b@E{+U{HXgx|xL%ynUDd;d3MW&kJhaQ(LkFcL27Cik zAzhQot+G<|gJui&&NwapPI&)8S%uU>>k{i`TczO8Ug2wrc%y?X% zJ9Oq`b<~(Jq!UN`+teEE?~5Sjv>t(cXh5!!$CoFiJP|7|YDz%96t4UX6A%=y)$1Rd zLXu>vL87bPBf>YAwF{(X!tZ+;plhBv^`@o2A9_v@PQ_eha-3acfOYKYeh_e2pz%QV zItIZLLZBmYGrhW8G!T>1QC6>9r~d&|`Wp?EZ!|hRJ_xA2&}cjzG=o?o3p6jCvHH5G z+`V2eNCQk#@G6&%c=-Vh`U{c25xGZ%(o%jwgia&*H4%y~N#2unB9Dn^`=tifExP7Q zb2|v>3glaPR?HMLh1I-Wbc)`Zv*v6#MNs_Q4g5eIty9U!*PwyiYj=dCi>C5=dq<)b bY4MaZleLupS!{#P=_VP{8SPv8HfsMLVS`#d diff --git a/Python/drive/driver.py b/Python/drive/driver.py new file mode 100644 index 0000000..06b845f --- /dev/null +++ b/Python/drive/driver.py @@ -0,0 +1,89 @@ +import requests +import hashlib + + +def encode(val: str): + return hashlib.md5(val.encode("utf-8")).hexdigest() + + +class Driver(object): + message: str + + def __init__(self, remote: str, username: str, password: str) -> None: + self.username = username + self.password = password + self.remote = remote + + def sendMysScript(self, script: str) -> bool: + r = requests.get(str(self.remote) + "/?Logon=" + str(self.username) + "?Passwd=" + str( + encode(self.password)) + "?Command=" + script) + getText = r.text + split: list[str] = getText.split("\n") + message: str = "" + j = 0 + splitADD: list[str] = [] + for i in split: + j += 1 + splitADD.append(str(i) + "\n") + + message = message.join(splitADD) + + j = j - 1 + self.message = message + if j == 0: + return False + else: + return True + + def getMessage(self) -> str: + return self.message + + def __str__(self) -> str: + return f"Driver(username={self.username}, password={self.password}, remote={self.remote})" + + def listDatabase(self) -> list[str]: + if self.sendMysScript("list database"): + return self.getMessage().split("\n") + else: + return [] + + def deleteDatabase(self, name: str) -> bool: + return self.sendMysScript("delete database " + str(name)) + + def deleteData(self, name: str, database: str) -> bool: + return self.sendMysScript("delete data '" + str(name) + "' in " + database) + + def reNameDatabase(self, name: str, NewName: str) -> bool: + return self.sendMysScript("rename database '" + name + "' '" + NewName + "'") + + def reNameData(self, name: str, NewName: str, database: str) -> bool: + return self.sendMysScript("rename data '" + name + "' '" + NewName + "' in " + database) + + def createDatabase(self, name: str) -> bool: + return self.sendMysScript("create database '" + name + "'") + + def createData(self, name: str, database: str) -> bool: + return self.sendMysScript("create data '" + name + "' in " + database) + + def findDatabase(self, index: str) -> list[str]: + self.sendMysScript("find database " + index) + return self.getMessage().split("\n") + + def findData(self, index: str) -> list[str]: + self.sendMysScript("find data " + index) + return self.getMessage().split("\n") + + def getData(self, dataName: str, type: str, database: str) -> str: + self.sendMysScript("get '" + dataName + "'." + type + " in" + database) + return self.getMessage().replace("\n", "") + + def indexData(self, index: str, database: str) -> list[str]: + self.sendMysScript("index '" + index + "' in " + database) + return self.getMessage().split("\n") + + def copyDatabase(self, name: str, target: str) -> bool: + return self.sendMysScript("copy '" + name + "' '" + target + "'") + + def getAlldata_FromDatabase(self, database: str) -> list[str]: + self.sendMysScript("ls " + database) + return self.getMessage().split("\n") diff --git a/Python/requirements.txt b/Python/requirements.txt new file mode 100644 index 0000000..663bd1f --- /dev/null +++ b/Python/requirements.txt @@ -0,0 +1 @@ +requests \ No newline at end of file diff --git a/Python/test.py b/Python/test.py index a189d56..21668e2 100644 --- a/Python/test.py +++ b/Python/test.py @@ -1,9 +1,13 @@ -import SqlDrive.SqlDrive as a +from drive import driver import time -b = a.SQL_DO("http://127.0.0.1:8888/","root","123456") +b = driver.Driver( + remote="http://127.0.0.1:8888/", + username="root", + password="123456", +) s = time.time() print(len(b.findData("d"))) e = time.time() -print((e-s)) \ No newline at end of file +print((e - s)) -- Gitee From a67a7fcba3dd1311261f70037dc744ec477106a5 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Fri, 3 Feb 2023 17:09:17 +0800 Subject: [PATCH 2/6] python3 api-0.0.3 --- Python/README.md | 21 ++++++++ Python/__init__.py | 6 +++ Python/drive/driver.py | 116 ++++++++++++++++++++-------------------- Python/requirements.txt | 2 +- Python/test.py | 6 +-- 5 files changed, 88 insertions(+), 63 deletions(-) create mode 100644 Python/README.md create mode 100644 Python/__init__.py diff --git a/Python/README.md b/Python/README.md new file mode 100644 index 0000000..5b9ccf7 --- /dev/null +++ b/Python/README.md @@ -0,0 +1,21 @@ +# Python Api + +安装依赖 +```commandline +pip install -r requirements.txt +``` + +示例 +```python +from drive import driver +driver = driver.Driver( + host="127.0.0.1", + username="root", + password="123456", +) + + +driver.createDatabase("Linwin") +driver.createData("Data", "Linwin") + +``` \ No newline at end of file diff --git a/Python/__init__.py b/Python/__init__.py new file mode 100644 index 0000000..30f534b --- /dev/null +++ b/Python/__init__.py @@ -0,0 +1,6 @@ +from drive import driver + + +__all__ = [ + "driver", +] diff --git a/Python/drive/driver.py b/Python/drive/driver.py index 06b845f..26b6abb 100644 --- a/Python/drive/driver.py +++ b/Python/drive/driver.py @@ -1,89 +1,87 @@ import requests import hashlib +from typing import List, Iterable -def encode(val: str): - return hashlib.md5(val.encode("utf-8")).hexdigest() +class Driver(object): + """ + LinWin DB Server Python Client. + e.g. + >>> from drive import driver + >>> driver = driver.Driver( + >>> host="127.0.0.1", + >>> username="root", + >>> password="123456", + >>> ) + >>> driver.remote + > 'http://127.0.0.1:8888' -class Driver(object): - message: str - def __init__(self, remote: str, username: str, password: str) -> None: + """ + + def __init__(self, username: str, password: str, host: str, port: int = 8888, enable_ssl=False) -> None: self.username = username - self.password = password - self.remote = remote - - def sendMysScript(self, script: str) -> bool: - r = requests.get(str(self.remote) + "/?Logon=" + str(self.username) + "?Passwd=" + str( - encode(self.password)) + "?Command=" + script) - getText = r.text - split: list[str] = getText.split("\n") - message: str = "" - j = 0 - splitADD: list[str] = [] - for i in split: - j += 1 - splitADD.append(str(i) + "\n") - - message = message.join(splitADD) - - j = j - 1 - self.message = message - if j == 0: - return False - else: + self.password = hashlib.md5(password.encode("utf-8")).hexdigest() # generate md5 value of raw password + self.host = host + self.port = port + self.enable_ssl = enable_ssl + + @property + def remote(self): + return f"{'https' if self.enable_ssl else 'http'}://{self.host}:{self.port}" + + def execute(self, script: str) -> str: + response = requests.get(f"{self.remote}/?Logon={self.username}?Passwd={self.password}?Command={script}") + raw = response.text.strip() + assert not not raw, "Request execution failure!" + return raw + + def execute_ignore(self, script: str) -> bool: + try: + self.execute(script) return True - - def getMessage(self) -> str: - return self.message + except AssertionError: + return False def __str__(self) -> str: return f"Driver(username={self.username}, password={self.password}, remote={self.remote})" - def listDatabase(self) -> list[str]: - if self.sendMysScript("list database"): - return self.getMessage().split("\n") - else: - return [] + def listDatabase(self) -> List[str]: + return self.execute("list database").split("\n") def deleteDatabase(self, name: str) -> bool: - return self.sendMysScript("delete database " + str(name)) + return self.execute_ignore(f"delete database {name}") def deleteData(self, name: str, database: str) -> bool: - return self.sendMysScript("delete data '" + str(name) + "' in " + database) + return self.execute_ignore(f"delete data '{name}' in {database}") - def reNameDatabase(self, name: str, NewName: str) -> bool: - return self.sendMysScript("rename database '" + name + "' '" + NewName + "'") + def renameDatabase(self, name: str, NewName: str) -> bool: + return self.execute_ignore(f"rename database '{name}' '{NewName}'") - def reNameData(self, name: str, NewName: str, database: str) -> bool: - return self.sendMysScript("rename data '" + name + "' '" + NewName + "' in " + database) + def renameData(self, name: str, NewName: str, database: str) -> bool: + return self.execute_ignore(f"rename data '{name}' '{NewName}' in {database}") def createDatabase(self, name: str) -> bool: - return self.sendMysScript("create database '" + name + "'") + return self.execute_ignore(f"create database '{name}'") def createData(self, name: str, database: str) -> bool: - return self.sendMysScript("create data '" + name + "' in " + database) + return self.execute_ignore(f"create data '{name}' in {database}") - def findDatabase(self, index: str) -> list[str]: - self.sendMysScript("find database " + index) - return self.getMessage().split("\n") + def findDatabase(self, index: str) -> List[str]: + return self.execute(f"find database {index}").split("\n") - def findData(self, index: str) -> list[str]: - self.sendMysScript("find data " + index) - return self.getMessage().split("\n") + def findData(self, index: str) -> List[str]: + return self.execute(f"find data {index}").split("\n") - def getData(self, dataName: str, type: str, database: str) -> str: - self.sendMysScript("get '" + dataName + "'." + type + " in" + database) - return self.getMessage().replace("\n", "") + def getData(self, name: str, type: str, database: str) -> str: + return self.execute(f"get '{name}'.{type} in {database}").replace("\n", "") - def indexData(self, index: str, database: str) -> list[str]: - self.sendMysScript("index '" + index + "' in " + database) - return self.getMessage().split("\n") + def indexData(self, index: str, database: str) -> List[str]: + return self.execute(f"index '{index}' in {database}").split("\n") def copyDatabase(self, name: str, target: str) -> bool: - return self.sendMysScript("copy '" + name + "' '" + target + "'") + return self.execute_ignore(f"copy '{name}' '{target}'") - def getAlldata_FromDatabase(self, database: str) -> list[str]: - self.sendMysScript("ls " + database) - return self.getMessage().split("\n") + def iterFromDatabase(self, database: str) -> Iterable[str]: + return iter(self.execute(f"ls {database}").split("\n")) diff --git a/Python/requirements.txt b/Python/requirements.txt index 663bd1f..e465b3b 100644 --- a/Python/requirements.txt +++ b/Python/requirements.txt @@ -1 +1 @@ -requests \ No newline at end of file +requests>=2 \ No newline at end of file diff --git a/Python/test.py b/Python/test.py index 21668e2..54cb75f 100644 --- a/Python/test.py +++ b/Python/test.py @@ -1,13 +1,13 @@ from drive import driver import time -b = driver.Driver( - remote="http://127.0.0.1:8888/", +driver = driver.Driver( + host="127.0.0.1", username="root", password="123456", ) s = time.time() -print(len(b.findData("d"))) +print(len(driver.findData("d"))) e = time.time() print((e - s)) -- Gitee From 9c4e89359f9e335efc95f87efb877dd48cf3e903 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Fri, 3 Feb 2023 18:12:54 +0800 Subject: [PATCH 3/6] python3 api-0.0.3.1 --- Python/drive/driver.py | 7 +++++++ Python/test.py | 7 ++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Python/drive/driver.py b/Python/drive/driver.py index 26b6abb..9b65564 100644 --- a/Python/drive/driver.py +++ b/Python/drive/driver.py @@ -21,6 +21,13 @@ class Driver(object): """ def __init__(self, username: str, password: str, host: str, port: int = 8888, enable_ssl=False) -> None: + """ + :param username: user name (like root, linwin) + :param password: raw password (like 123456) + :param host: host name of the database (like 127.0.0.1, localhost, example.org) + :param port: port of the database, default is 8888 + :param enable_ssl: enable ssl. if the variable is true, it will be https:// . + """ self.username = username self.password = hashlib.md5(password.encode("utf-8")).hexdigest() # generate md5 value of raw password self.host = host diff --git a/Python/test.py b/Python/test.py index 54cb75f..e4ec121 100644 --- a/Python/test.py +++ b/Python/test.py @@ -1,5 +1,5 @@ from drive import driver -import time +from timeit import timeit driver = driver.Driver( host="127.0.0.1", @@ -7,7 +7,4 @@ driver = driver.Driver( password="123456", ) -s = time.time() -print(len(driver.findData("d"))) -e = time.time() -print((e - s)) +print(timeit('driver.findData("d")', globals=globals(), number=10000)) -- Gitee From 945d9b0b4b8acf6a66d94d921dee6e9bd1044c88 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Fri, 3 Feb 2023 19:04:13 +0800 Subject: [PATCH 4/6] python3 api-0.0.3.2 fixed bug --- Python/drive/driver.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Python/drive/driver.py b/Python/drive/driver.py index 9b65564..b0f5e7e 100644 --- a/Python/drive/driver.py +++ b/Python/drive/driver.py @@ -36,12 +36,11 @@ class Driver(object): @property def remote(self): - return f"{'https' if self.enable_ssl else 'http'}://{self.host}:{self.port}" + return f"{'https' if self.enable_ssl else 'http'}://{self.host}:{self.port}/" def execute(self, script: str) -> str: - response = requests.get(f"{self.remote}/?Logon={self.username}?Passwd={self.password}?Command={script}") - raw = response.text.strip() - assert not not raw, "Request execution failure!" + raw = requests.get(f"{self.remote}/?Logon={self.username}?Passwd={self.password}?Command={script}").text + assert raw != "\n", "Request execution failure!" return raw def execute_ignore(self, script: str) -> bool: -- Gitee From 6e63c231403b531376b3fb5fcab24ea861729ea7 Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Fri, 3 Feb 2023 20:49:44 +0800 Subject: [PATCH 5/6] python3 api-0.1 release --- Python/drive/__init__.py | 5 ++++ Python/drive/driver.py | 10 +++++--- Python/shell.py | 50 ++++++++++++++++++++++++++++++++++++++++ Python/test.py | 7 +++++- 4 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 Python/drive/__init__.py create mode 100644 Python/shell.py diff --git a/Python/drive/__init__.py b/Python/drive/__init__.py new file mode 100644 index 0000000..2542e3b --- /dev/null +++ b/Python/drive/__init__.py @@ -0,0 +1,5 @@ +from . import driver + +__all__ = [ + "driver", +] diff --git a/Python/drive/driver.py b/Python/drive/driver.py index b0f5e7e..5378405 100644 --- a/Python/drive/driver.py +++ b/Python/drive/driver.py @@ -3,6 +3,10 @@ import hashlib from typing import List, Iterable +class DatabaseError(Exception): + pass + + class Driver(object): """ LinWin DB Server Python Client. @@ -40,14 +44,14 @@ class Driver(object): def execute(self, script: str) -> str: raw = requests.get(f"{self.remote}/?Logon={self.username}?Passwd={self.password}?Command={script}").text - assert raw != "\n", "Request execution failure!" + assert raw != "\n", DatabaseError("Request execution failure!") return raw - + def execute_ignore(self, script: str) -> bool: try: self.execute(script) return True - except AssertionError: + except DatabaseError: return False def __str__(self) -> str: diff --git a/Python/shell.py b/Python/shell.py new file mode 100644 index 0000000..f00608c --- /dev/null +++ b/Python/shell.py @@ -0,0 +1,50 @@ +# +# Author: Linwincloud & zmh-program +# Description: Mydb Shell for Linwin Data Server +# Usage: Operate the Linwin Database. +# + +import sys +from time import time +from drive import driver + + +# 因为控制台输出时序问题,暂不用logging + + +def _save_qps_count(bench: float) -> str: + return f'{round(1 / bench, 2) if bench != 0 else "*"} qps' + + +def _get_query_params(bench: float) -> str: + return "Query executed completely! (%0.3f sec, %s)" % (bench, _save_qps_count(bench)) + + +if __name__ == "__main__": + _driver = driver.Driver( + host=input("Logon Host[default 127.0.0.1]: ").strip() or "127.0.0.1", + port=int(input("Logon Port[default 8888]: ").strip() or 8888), + username=input("Logon User[default root]: ").strip() or "root", + password=input("Logon Password[default 123456]: ").strip() or "123456", + ) + + print(" Linwin DB Client ".center(64, "=")) + while True: + script = input("LinwinDB-Mydb Shell $ ").strip() + if script == "quit": + sys.exit(0) + elif not script: + continue + mark = time() + try: + response = _driver.execute(script) + except driver.DatabaseError: + benchmark = time() - mark + print(_get_query_params(benchmark)) + else: + print(response, end="") + if response not in ("Error Command and Script\r\n", "Command syntax error!\r\n"): + benchmark = time() - mark + print(_get_query_params(benchmark)) + continue + print(end="\n") diff --git a/Python/test.py b/Python/test.py index e4ec121..46d7b4b 100644 --- a/Python/test.py +++ b/Python/test.py @@ -7,4 +7,9 @@ driver = driver.Driver( password="123456", ) -print(timeit('driver.findData("d")', globals=globals(), number=10000)) +# tip: Linwin DB Database ip 节流, 短时间内请求次数请不要设置过多 + +driver.createDatabase("Linwin") +driver.createData("Data", "Linwin") + +print("qps:", 1/timeit('driver.findData("d")', globals=globals(), number=1)) -- Gitee From c0210be8fdc947886722a99e4d2e870d756337ff Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Fri, 3 Feb 2023 21:00:55 +0800 Subject: [PATCH 6/6] python3 api-0.1.1 update docs --- Python/README.md | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/Python/README.md b/Python/README.md index 5b9ccf7..5cae7f5 100644 --- a/Python/README.md +++ b/Python/README.md @@ -1,21 +1,51 @@ # Python Api -安装依赖 +### 安装依赖 ```commandline pip install -r requirements.txt ``` -示例 +### 示例 ```python from drive import driver -driver = driver.Driver( +db = driver.Driver( host="127.0.0.1", username="root", password="123456", ) +try: + db.createDatabase("Linwin") + db.createData("Data", "Linwin") +except driver.DatabaseError as e: + ... +``` + +### Shell +示例 +```commandline +python shell.py +Logon Host[default 127.0.0.1]: localhost +Logon Port[default 8888]: +Logon User[default root]: +Logon Password[default 123456]: +======================= Linwin DB Client ======================= +LinwinDB-Mydb Shell $ something-wrong +Error Command and Script -driver.createDatabase("Linwin") -driver.createData("Data", "Linwin") +LinwinDB-Mydb Shell $ create database 'asdf' +Create Successful! -``` \ No newline at end of file +Query executed completely! (0.292 sec, 3.42 qps) +LinwinDB-Mydb Shell $ create something-wrong +Command syntax error! + +LinwinDB-Mydb Shell $ list database +asdf + +Query executed completely! (0.277 sec, 3.61 qps) +LinwinDB-Mydb Shell $ +LinwinDB-Mydb Shell $ +LinwinDB-Mydb Shell $ quit + +``` -- Gitee