我有一个对象列表,我有一个充满记录的数据库表.我的对象列表有一个title属性,我想从列表中删除任何具有重复标题的对象(保留原始标题).
然后我想检查我的对象列表是否有数据库中任何记录的重复,如果是,请在将它们添加到数据库之前从列表中删除这些项目.
我已经看到了从这样的列表中删除重复项的解决方案:myList = list(set(myList))
,但我不确定如何使用对象列表执行此操作?
我也需要维护对象列表的顺序.我也想也许我可以difflib
用来检查标题的差异.
我不希望比基本的CRUD类型功能更多.我知道SQLAlchemy更灵活,但sqlobject的语法等似乎更容易起床和使用.
我想连接到需要ca-cert的MySQL数据库.我可以用MySQLdb做到,如下所示:
MySQLdb.connect(host = self.host,
port = self.port,
unix_socket = self.unix_socket,
user = self.user,
passwd = self.passwd,
db = self.db,
ssl = { 'cert': self.sslcert,
'key': self.sslkey,
'ca': self.sslca }
Run Code Online (Sandbox Code Playgroud)
我如何在SQLAlchemy或SQLObject中做同样的想法?
谢谢,彼得
如何在JDBI中使用SQL对象查询进行排序?
我想做的事情如下:
@SqlQuery(
"SELECT * FROM users " +
"WHERE something = :something " +
"ORDER BY :orderBy :orderDir"
)
List<User> getUsers(
@Bind("something") Integer something
, @BindOrderBy("orderBy") String orderBy
, @BindOrderDir("orderDir") String orderDir
);
Run Code Online (Sandbox Code Playgroud)
要么
@SqlQuery(
"SELECT * FROM users " +
"WHERE something = :something " +
"ORDER BY :orderBy :orderDir"
)
List<User> getUsers(
@Bind("something") Integer something
, @Bind("orderBy") OrderBy orderBy
, @Bind("orderDir") OrderDir orderDir
);
Run Code Online (Sandbox Code Playgroud) 我已经使用SQLObject很长一段时间了,但是注意到SQLAlchemy在过去几年中变得更受欢迎:http://www.google.com/trends? q = sqlobject,+ sqlalchemy
是否有令人信服的理由切换到SQLAlchemy?它的性能相对于SQLObject如何?它的可用性?使用Elixir会增加性能开销是多少?
我的需求是基本的,简单的CRUD.没有异国情调.
我已经看到了这个相关的问题,但它是在1年多前被问过并没有太多回应.
是否可以使用sqlobject从iron python连接到mysql数据库?如果是这样,怎么样?我必须安装什么?
我为cpython安装了sqlobject,它工作正常,但如果我在ironpython中使用相同的包,我会得到"ImportError:没有名为_mysql的模块".我理解这意味着ironpython无法加载访问mysql API所必需的基于C的.dll.什么是变通方法,还是有一个?
在我的服务器代码中,有一个对_SO_fetchAlternateID
(嵌套在某个value
调用中)的调用,它最终调用makeConnection
了pgconnection.py
.
此调用失败conn.autocommit(1)
,并出现错误
类型错误:“bool”对象不可调用
这是 SQLObject 的 (0.8.7) 代码:
def makeConnection(self):
try:
if self.use_dsn:
conn = self.module.connect(self.dsn)
else:
conn = self.module.connect(**self.dsn_dict)
except self.module.OperationalError, e:
raise self.module.OperationalError("%s; used connection string %r" % (e, self.dsn))
if self.autoCommit:
# psycopg2 does not have an autocommit method.
if hasattr(conn, 'autocommit'):
conn.autocommit(1)
return conn
Run Code Online (Sandbox Code Playgroud)
调试显示 conn 确实持有一个连接对象,但 autocommit 不是一个方法,而是一个布尔值 (False)。
self.module
是模块“psycopg2”(2.4.2)。
这是配置问题吗?版本不匹配?
更新:
结果证明是 psycopg2-2.4.2 中的不兼容问题。查看 C 源代码,psycopg/connection.h 有一个整数变量,不幸的是名为autocommit
. 版本 2-2.4 工作正常。
给定一个文件包含如下行:
(?i:\bsys\.user_catalog\b)
Run Code Online (Sandbox Code Playgroud)
在读取这些行时,我希望该值是一个原始字符串(未转义),这意味着,在内存中,行应该是
r'(?i:\bsys\.user_catalog\b)'
Run Code Online (Sandbox Code Playgroud)
代替
(?i:\bsys\.user_catalog\b)
Run Code Online (Sandbox Code Playgroud)
当传递给诸如sqlobject之类的lib时,它会被转义.
例如,使用sqlobject,如果我声明
Table(column=r'(?i:\bsys\.user_catalog\b)')
Run Code Online (Sandbox Code Playgroud)
如果我说的话,我会得到理想的结果
Table(column='(?i:\bsys\.user_catalog\b)')
Run Code Online (Sandbox Code Playgroud)
我不.
所以问题基本上是,当我不处于声明/赋值模式(例如a = r'string'
)时,我可以传递原始字符串,而不是字符串已经在内存中.
我没有使用ORM,而是在没有ORM(SQLObject/SQLAlchemy)的Python和MySQL中考虑以下方法.我想得到一些关于这似乎是否可能产生任何负面长期后果的反馈,因为从短期来看,从我所知道的情况来看似乎很好.
而不是将数据库中的行转换为对象:
表示游标的对象提供对表的访问,如下所示:
cursor.mytable.get_by_ids(低,高)
删除意味着将time_of_removal设置为当前时间
因此,基本上这消除了对ORM的需要,因为每个表都有一个类来表示它,并且在该类中,单独的dict表示每一行.
类型映射是微不足道的,因为每个dict(行)是python/blub中的第一个类对象,允许您知道对象的类,此外,Python中的低级数据库库处理字段级别的类型转换为他们适当的应用程序级类型.
如果你发现沿着这条路走下去的任何潜在问题,请告诉我.谢谢.
我有一张桌子,Foo.我在Foo上运行查询以从Foo的子集中获取ID.然后我想运行一组更复杂的查询,但仅限于那些ID.有没有一种有效的方法来做到这一点?我能想到的最好的是创建一个查询,例如:
SELECT ... --complicated stuff
WHERE ... --more stuff
AND id IN (1, 2, 3, 9, 413, 4324, ..., 939393)
Run Code Online (Sandbox Code Playgroud)
也就是说,我构建了一个巨大的"IN"子句.这有效吗?有没有更有效的方法,或者是获取ID的初始查询加入的唯一方法?如果它有帮助,我使用SQLObject连接到PostgreSQL数据库,并且我可以访问执行查询的游标以获取所有ID.
更新:我应该提到更复杂的查询都要么依赖这些ID,要么创建更多ID以在其他查询中查找.如果我要做一个大型查询,我最终会一次加入六个表,这可能太慢了.
在我的 sqlobject 实现中,我有以下行:
members = Member.select("CONCAT_WS(' ', member.first_name, member.last_name, member.personal_code_number, member.mail) like " + Member.sqlrepr('%' + query + '%'))
Run Code Online (Sandbox Code Playgroud)
我想将其转换为使用 sqlalchemy 但尚未找到方法。
sqlobject ×11
python ×8
sqlalchemy ×5
mysql ×3
ironpython ×1
java ×1
jdbi ×1
orm ×1
postgresql ×1
psycopg2 ×1
sql ×1
sql-order-by ×1
string ×1