1. 程式人生 > >Python操作遠程數據庫

Python操作遠程數據庫

his exec 通配符 .get toc 大量 while 避免 登入

我的項目要往數據庫中插入create_time和update_time,那就勢必要引用現在的系統時間,經過大量的查找,終於發現往python是沒有對應時間datetime的相關通配符的,那麽我們要怎麽實現呢。

其實很簡單,我們只需要把datetime轉換成字符串類型的就行

    def insertIntoChannel(self, user):  
            conn = JDBCUtils.getConnection()  
            cursor = conn.cursor()  
            dt=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")  
            cursor.execute("insert into user(id,age,name,create_time,update_time) \  
                          values(‘%d‘,‘%d‘,‘%s‘,‘%s‘,‘%s‘)" % \  
                           (user.getId(),user.getAge(), user.getName(),dt,dt))  
            cursor.close()  
            conn.commit()  
            conn.close()  

時間間隔

import time
def sleeptime(hour,min,sec):
    return hour*3600 + min*60 + sec;
second = sleeptime(0,0,20);
while 1==1:
    time.sleep(second);
    print ‘do action‘
#這是隔20秒執行一次
;

另外操作遠程數據庫需要遠程數據庫對本地進行授權:

若沒有授權會出現以下提示

ERROR 1130: Host 192.168.3.100 is not allowed to connect to this MySQL server 

在本機登入mysql後,更改 “mysql” 數據庫裏的 “user” 表裏的 “host” 項,從”localhost”改稱‘%‘。

mysql -u root -p
mysql>use mysql;
mysql>select ‘host‘ from user where user=‘root‘;
mysql>update user set host = ‘%‘ where user =‘root‘;
mysql>flush privileges;
mysql>select ‘host‘   from user where user=‘root‘; 

第一句是以權限用戶root登錄

第二句:選擇mysql庫

第三句:查看mysql庫中的user表的host值(即可進行連接訪問的主機/IP名稱)

第四句:修改host值(以通配符%的內容增加主機/IP地址),當然也可以直接增加IP地址

第五句:刷新MySQL的系統權限相關表

第六句:再重新查看user表時,有修改。。

記得Mysql服務需要重新啟動(確保修改有效),否則可能修改的結果無法體現。

註意:修改過後本地root賬戶無法連接數據庫

phpMyAdmin 嘗試連接到 MySQL 服務器,但服務器拒絕連接。您應該檢查配置文件中的主機、用戶名和密碼,並確認這些信息與 MySQL 服務器管理員所給出的信息一致。

仍然使用root賬戶登陸,密碼為空。刪除root用戶再創建並授權。

mysql -u root -p
drop user [email protected]
create user [email protected] identified by ‘你的密碼‘;
grant all privileges on *.* to [email protected];

另外:可以創建遠程登陸用戶並授權

grant all PRIVILEGES on test_db.* to [email protected]  identified by ‘23455‘;
flush privileges; 

all PRIVILEGES 表示賦予所有的權限給指定用戶,這裏也可以替換為賦予某一具體的權限,例如select,insert,update,delete,create,drop 等,具體權限間用“,”半角逗號分隔。

test_db.* 表示上面的權限是針對於哪個表的,test_db指的是數據庫,後面的 * 表示對於所有的表,由此可以推理出:對於全部數據庫的全部表授權為“*.*”,對於某一數據庫的全部表授權為“數據庫名.*”,對於某一數據庫的某一表授權為“數據庫名.表名”。

root 表示你要給哪個用戶授權,這個用戶可以是存在的用戶,也可以是不存在的用戶。

192.168.1.101 表示允許遠程連接的 IP 地址,也就是你本地的ip地址。如果想不限制鏈接的 IP 則設置為“%”即可。

123456 為用戶的密碼。

ERROR : (2006, ‘MySQL server has gone away‘)

問題分析:client和MySQL server之間的鏈接斷開了。

造成這樣的原因一般是sql操作的時間過長,或者是傳送的數據太大(例如使用insert ... values的語句過長, 這種情況可以通過修改max_allowed_packed的配置參數來避免,也可以在程序中將數據分批插入)。

Python操作遠程數據庫