TCP/IP访问数据库FlaskSQLAlchemy

2024-10-03 02:35:44 发布

您现在位置:Python中文网/ 问答频道 /正文

以前我使用Python Flask和SQLAlchemy ORM构建web API。目前,通信采用TCP/IP作为传输协议。尝试从TCP/IP requestHandler访问数据库时出现问题。无法执行访问一个模型的查询。到目前为止,我的代码是:

运行.py

app = create_app(app_mode)
# serverApp = ServerApp.ServerApp.getInstance()
if __name__ == '__main__':
  app.run(host="127.0.0.1", port=Server.PORT, threaded=True,debug=True,use_reloader=False)

应用程序.py

client = ari.connect('http://localhost:8088', 'asterisk', 'asterisk')
bridgeApp = BridgeApp.BridgeApp.getInstance(client)
serverApp = ServerApp.ServerApp.getInstance(bridgeApp)

def create_app(env_name):
    app = Flask(__name__)
    app.config.from_object(app_config[env_name])

    db.init_app(app)    

    def startBridgeApp():
        try:
            bridgeApp.run()
        except ValueError:
            pass

    if not bridgeApp.isRun():
        thread.start_new_thread(startBridgeApp, ())    
    def startServerApp():
        try:
            serverApp.run()
        except ValueError:
            pass

    if not serverApp.isRun():
        thread.start_new_thread(startServerApp, ())

ServerApp.py


class ServerApp:
    __instance = None
    __run = False

    def __init__(self,bridgeApp):

       ServerApp.__instance = self                               
       self.bridgeApp = bridgeApp       
       self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       self.server_address = ("127.0.0.1",5009)
       self.sock.bind(self.server_address)
       self.client_address=None
       self.connection=None


    def run(self):
        if not ServerApp.__run:
            self.listen()

    def stop(self):
        if ServerApp.__run:
            ServerApp.__run = False

    def listen(self):
        self.sock.listen(1)

        while True:
            (self.connection, self.client_address) = self.sock.accept()                    
            self.accept()

    def accept(self):
        try:
            while True:                 
                data = self.connection.recv(1024).decode()
                if data :
                    self.handleData(data)
                    self.connection.sendall(data.encode())                    
                else :
                    print ('no more data from', self.client_address)
                    break                                    
        except:
            self.connection.close()

    def handleData(self,data):
        print ( 'handleData "%s"' % data)
        check = json.loads(data)

        try:
            caller_device = DeviceModel.get_all()
        except:
            print "error"           

设备模型.py

# src/models/DeviceModel.py

from marshmallow import fields, Schema
import datetime
from . import db, bcrypt
from src.constant import *

class DeviceModel(db.Model):

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(25), unique=True, nullable=False)
    ipAddress = db.Column(db.String(255), nullable=False)

    # class constructor
    def __init__(self, data):        
        self.id = data.get('id')        
        self.name = data.get('name')
        self.ipAddress = data.get('ipAddress')

    def save(self):                                
        db.session.add(self)
        db.session.commit()

    def update(self, data):
        for key, item in data.items():
            setattr(self, key, item)
        self.modifiedAt = datetime.datetime.utcnow()
        db.session.commit()

    def delete(self):
        db.session.delete(self)
        db.session.commit()

    @staticmethod
    def get_all():
        return DeviceModel.query.all()  

任何人都可以帮助,我不知道为什么不显示数据,即使服务器应用程序仍然在应用程序环境


Tags: runnamefrompyselfclientfalsetrue