我在Azure上有一个小应用程序,它作为具有以下特征的Web应用程序运行:
我试图通过SQLAlchemy从我的python代码创建一个表。这是我的文件夹结构:
这是我的Exception (Database Exception) 'yii\db\Exception' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 index investmo_index: parse error: SNIPPET() requires 2 arguments
The SQL being executed was: SELECT *, SNIPPET(title, 'test', 'before_match=<mark>', 'after_match=</mark>') AS _title, SNIPPET(header, 'test', 'before_match=<mark>', 'after_match=</mark>') AS _header, SNIPPET(content, 'test', 'before_match=<mark>', 'after_match=</mark>') AS _content FROM `investmo_index` WHERE MATCH('test')'
文件:
__init__.py
然后我有我的index.py文件:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
POSTGRES = {
'user': 'admin_user@pracap',
'pw': 'password_goes_here',
'db': 'apitest',
'host': 'pracap.postgres.database.azure.com',
'port': '5432',
}
URL = 'postgresql://%(user)s:\%(pw)s@%(host)s:%(port)s/%(db)s' % POSTGRES
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
import apitestproject.index
这是我的usermodel文件:
from flask import Flask
from flask_restful import Api
from apitestproject import app, db
@app.before_first_request
def create_tables():
db.create_all()
@app.route('/')
@app.route('/home')
def home():
return "I'm the default route"
当我运行我的项目时,我收到以下错误:
from ..apitestproject import db
class UserModel(db.Model):
__tablename__ = 'users'
id = db.column(db.string, primary_key=True)
name = db.column(db.string(50))
address = db.column(db.string(144))
salary = db.column(db.numeric(12, 2))
position = db.column(db.string(50))
password = db.column(db.string(50))
我已经从Azure中禁用了requiredSSL,仅用于测试目的,并允许来自防火墙上每个IP的连接,如MSFT教程中所示。
之前有人遇到此错误吗?
答案 0 :(得分:0)
根据我的经验,我认为问题是由psycopg2
使用连接字符串postgresql://user:password@hostname:port/dbname
引起的。要使用psycopg2
,您需要使用Python中的连接字符串作为下面的代码,请参阅官方文档here。
import psycopg2
# Update connection string information obtained from the portal
host = "mypgserver-20170401.postgres.database.azure.com"
user = "mylogin@mypgserver-20170401"
dbname = "mypgsqldb"
password = "<server_admin_password>"
sslmode = "require"
# Construct connection string
conn_string = "host={0} user={1} dbname={2} password={3} sslmode={4}".format(host, user, dbname, password, sslmode)
conn = psycopg2.connect(conn_string)
print "Connection established"
还有一个SO线程Can't Figure Out DB URI Postgres Azure,它解释了使用Python在Azure上连接PostgreSQL的一些问题。
希望它有所帮助。