我正在阅读有关sqlalchemy的内容,我看到以下代码:
employees_table = Table('employees', metadata,
Column('employee_id', Integer, primary_key=True),
Column('name', String(50)),
Column('manager_data', String(50)),
Column('engineer_info', String(50)),
Column('type', String(20), nullable=False)
)
employee_mapper = mapper(Employee, employees_table, \
polymorphic_on=employees_table.c.type, polymorphic_identity='employee')
manager_mapper = mapper(Manager, inherits=employee_mapper, polymorphic_identity='manager')
engineer_mapper = mapper(Engineer, inherits=employee_mapper, polymorphic_identity='engineer')
Run Code Online (Sandbox Code Playgroud)
我应该使用库中的常量使'type'成为一个int吗?或者我应该让make type为枚举?
我正在使用sqlalchemy编写Web应用程序.在网站未投入生产的第一阶段开发期间,一切顺利.我可以通过简单地删除旧的sqlite数据库并从头创建一个新数据库来轻松更改数据库模式.
现在该网站正在生产中,我需要保留数据,但我仍然希望通过轻松地将数据库转换为新模式来保持原始开发速度.
因此,假设我在修订版50中有model.py,在model.py中有修订版75,描述了数据库的模式.在这两个模式之间,大多数更改都是微不足道的,例如,使用默认值声明新列,我只想将此默认值添加到旧记录中.
最终,一些变化可能不是微不足道的,需要一些预先计算.
您如何(或将)如何处理快速变化的Web应用程序,例如,每天使用一个或两个新版本的生产代码?
顺便说一句,如果这有任何不同,该网站是用Pylons编写的.
我正在使用Alembic和SQL Alchemy.使用SQL Alchemy,我倾向于遵循一种模式,即我不将连接字符串与版本化代码一起存储.相反,我的文件secret.py包含任何机密信息.我把这个文件名丢给我,.gitignore所以它不会在GitHub上结束.
这种模式工作正常,但现在我开始使用Alembic进行迁移.看来我无法隐藏连接字符串.而是在alembic.ini中,将连接字符串作为配置参数放置:
# the 'revision' command, regardless of autogenerate
# revision_environment = false
sqlalchemy.url = driver://user:pass@localhost/dbname
# Logging configuration
[loggers]
keys = root,sqlalchemy,alembi
Run Code Online (Sandbox Code Playgroud)
我担心我会不小心为我的数据库提交一个包含用户名/密码信息的文件.我宁愿将这个连接字符串存储在一个地方,并避免意外将其提交给版本控制的风险.
我有什么选择?
我想查询PostgreSQL数据库并将输出作为Pandas数据帧返回.
我使用'SqlAlchemy'创建了与数据库的连接:
from sqlalchemy import create_engine
engine = create_engine('postgresql://user@localhost:5432/mydb')
Run Code Online (Sandbox Code Playgroud)
我将Pandas数据帧写入数据库表:
i=pd.read_csv(path)
i.to_sql('Stat_Table',engine,if_exists='replace')
Run Code Online (Sandbox Code Playgroud)
根据文档,看起来pd.read_sql_query()应该接受SQLAlchemy引擎:
a=pd.read_sql_query('select * from Stat_Table',con=engine)
Run Code Online (Sandbox Code Playgroud)
但它抛出一个错误:
ProgrammingError: (ProgrammingError) relation "stat_table" does not exist
Run Code Online (Sandbox Code Playgroud)
我正在使用Pandas版本0.14.1.
这样做的正确方法是什么?
Flask/SQLAlchemy如何配置为创建新的数据库连接(如果不存在)?
我有一个不经常访问的Python/Flask服务器,它使用SQLAlchemy.每隔几天就会访问一次,并且在第一次访问时它经常会抛出"MySQL服务器已经消失"的错误.后续的页面视图很好,但是出现这个初始错误看起来不合适.
我想知道处理这个问题的正确方法 - 像"长时间休息"这样的建议,在这种情况下大约需要4天,似乎不正确.如何测试缺少数据库连接并在需要时创建一个?
我如何将以下mysql查询转换为sqlalchemy?
SELECT * FROM `table_a` ta, `table_b` tb where 1
AND ta.id = tb.id
AND ta.id not in (select id from `table_c`)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我有这个sqlalchemy:
query = session.query(table_a, table_b)
query = query.filter(table_a.id == table_b.id)
Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用SQLAlchemy,但仍然无法解决一些概念问题.
归结为基本元素,我有两个这样的表(这是通过Flask-SQLAlchemy):
class User(db.Model):
__tablename__ = 'users'
user_id = db.Column(db.Integer, primary_key=True)
class Posts(db.Model):
__tablename__ = 'posts'
post_id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.user_id'))
post_time = db.Column(db.DateTime)
user = db.relationship('User', backref='posts')
Run Code Online (Sandbox Code Playgroud)
我将如何查询用户列表及其最新帖子(不包括没有帖子的用户).如果我使用SQL,我会这样做:
SELECT [whatever]
FROM posts AS p
LEFT JOIN users AS u ON u.user_id = p.user_id
WHERE p.post_time = (SELECT MAX(post_time) FROM posts WHERE user_id = u.user_id)
Run Code Online (Sandbox Code Playgroud)
所以我确切地知道"想要的"SQL以获得我想要的效果,但不知道如何在SQLAlchemy中"正确地"表达它.
编辑:如果它很重要,我在SQLAlchemy 0.6.6上.
我想创建一个用Python编写的数据库应用程序编程接口,并使用SQLAlchemy(或任何其他数据库连接器,如果它被告知使用SQLAlchemy进行此类任务不是一个好方法).该设置是在Linux或BSD上运行的MySQL服务器,以及在Linux或BSD机器上运行的Python软件(外部或本地).
基本上我想要做的是为每个连接生成一个新线程,协议将是自定义的并且非常简单,尽管对于每个请求我想打开一个新事务(或者我读过的会话)然后我需要提交会议.我现在面临的问题是,另一个会话很可能同时从另一个连接发生.
我的问题是我应该怎样处理这种情况?
我无法在python中找到一个模块,尽管easy_install说已经安装了.任何想法如何解决这个问题?
$ python -c "from flaskext.sqlalchemy import SQLAlchemy"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named sqlalchemy
$ python -V
Python 2.7
$ sudo easy_install sqlalchemy
Searching for sqlalchemy
Best match: SQLAlchemy 0.7.7
Adding SQLAlchemy 0.7.7 to easy-install.pth file
Using /usr/lib/python2.7/site-packages
Processing dependencies for sqlalchemy
Finished processing dependencies for sqlalchemy
Run Code Online (Sandbox Code Playgroud)
$ sudo pip install SQLAlchemy --upgrade要求已经是最新的:/usr/lib/python2.7/site-packages中的SQLAlchemy清理...
虽然pip说已经安装了.但我在sys.path输出中找不到它们.
$ sudo python -c "import sys;print sys.path" ['',
'/usr/lib/python2.7/site-packages/Flask_SQLAlchemy-0.15-py2.7.egg',
'/usr/lib/python2.7/site-packages/Flask-0.8-py2.7.egg',
'/usr/lib/python2.7/site-packages/Jinja2-2.6-py2.7.egg',
'/usr/lib/python2.7/site-packages/Werkzeug-0.8.3-py2.7.egg',
'/usr/lib/python2.7/site-packages/Flask_WTF-0.5.2-py2.7.egg',
'/usr/lib/python2.7/site-packages/WTForms-0.6.3-py2.7.egg',
'/usr/lib/python2.7/site-packages/Flask_Mail-0.6.1-py2.7.egg',
'/usr/lib/python2.7/site-packages/blinker-1.2-py2.7.egg', …Run Code Online (Sandbox Code Playgroud) 我有以下查询:
profiles = session.query(profile.name).filter(and_(profile.email == email, profile.password == password_hash))
Run Code Online (Sandbox Code Playgroud)
如何检查是否有一行,如何返回第一行(如果匹配则应该只有一行)?
python ×10
sqlalchemy ×10
flask ×2
mysql ×2
alembic ×1
migrate ×1
pandas ×1
postgresql ×1
pylons ×1
subquery ×1