我有一个连接到mysql db的laravel项目,当我更换服务器时,我的代码失败了,因为新服务器上有一个Mariadb
,当我检查日志时,我意识到,有MariaDb的一些不受支持的功能是ANY_VALUE()
如何根据MariaDb编辑我的SQL?
select(DB::raw('SUM(price) as price, SUM(price_now) as price_now,
ANY_VALUE(price_available) as price_available'),'adult_count')
答案 0 :(得分:3)
今天,您已经解决了问题。但是明天,当您运行相同的查询时,您将得到一个不同的错误。
在旧版本的MySQL或MariaDB中,如果price_available
不是GROUPing BY
,则将为ANY_VALUE()
获得“任何值”。实际上,这介于“不良做法”和“违反标准”之间。相对而言,MariaDB和后来的MySQL切换为“仅完整分组依据”。那时,MIN(price_available)
出现在MySQL中,但显然MariaDB放弃了。
对于旧版本和新版本都应该安全的旧解决方法是使用ONLY_FULL_GROUP_BY
或其他一些聚合函数。
另请参阅import sqlite3 as sql
from os import path
ROOT = path.dirname(p/Users/matthewdeyn/Coffea/app.pyath.relpath((__file__)))
def create_post(name, content):
con = sql.connect(path.join(ROOT, 'database.db'))
cur = con.cursor()
cur.execute('insert into posts (name, content) values(?, ?)', (name, content))
con.commit()
con.close()
def get_posts():
con = sql.connect(path.join(ROOT, 'database.db'))
cur = con.cursor()
cur.execute('select * from posts')
posts = cur.fetchall()
return posts
设置。
答案 1 :(得分:0)
我已经解决了替换问题:
选择(DB :: raw('SUM(price)作为价格,SUM(price_now)作为price_now, ANY_VALUE(price_available)as price_available'),'adult_count')
到
选择(DB :: raw('SUM(price)作为价格,SUM(price_now)作为price_now, price_available as price_available'),'adult_count')